组织邮政地址要素

时间:2013-10-16 10:42:46

标签: c#

如果我有以下邮政地址:

  

地址1:NULL
  地址2:36
  地址3:月出车道
  地址4:NULL
  地址5:伦敦

我想重新格式化地址,以便最终得到:

  

地址1:36
  地址2:月出车道
  地址3:伦敦
  地址4:NULL
  地址5:NULL

我开始搞乱SortedList,但我不太清楚如何继续。

SortedList<int, string> AddressParts = new SortedList<int, string>();

 AddressParts.Add(1, IncomingAddress1);
 AddressParts.Add(2, IncomingAddress2);
 AddressParts.Add(3, IncomingAddress3);
 AddressParts.Add(4, IncomingAddress4);
 AddressParts.Add(5, IncomingAddress5);

SortedList<int, string> SortedAddressParts = new SortedList<int, string>();

 foreach (KeyValuePair<int, string> pair in AddressParts)
 {
     if (pair.Key == 1 &&!string.IsNullOrEmpty(pair.Value)) 
     { 
         SortedAddressParts.Add(1, pair.Value); 
     }
 }

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

假设你想要的是在最后放置空行并保持文本条目的顺序 考虑这样做:

public IList<string> FormatAddress(IList<string> addressParts)
{
    var result = addressParts.Where(a => !string.IsNullOrEmpty(a)).ToList();
    result = result.Concat(Enumerable.Repeat((string)null, addressParts.Count - result.Count)).ToList();
    return result;
}

它可以使用任意数量的地址行,你只需要将它们包装在任何类型的列表中。

答案 1 :(得分:1)

如果您可以将地址变量表示为数组,那么以下算法将实现您想要的结果:

String[] address = {
    null,
    "36",
    "Moonrise Drive",
    null,
    "London"
};

List<String> address_new = new List<String>();

foreach (String s in address)
{
    if (!String.IsNullOrEmpty(s))
        address_new.Add(s);
}
for (int i = address_new.Count(); i < address.Length; i++)
{
    address_new.Add(String.Empty);
}
address = address_new.ToArray();

答案 2 :(得分:0)

我认为您希望保留int key以及更改Values的顺序。你可以这样做:

var sorted = AddressParts.Where(x => x.Value != null) //or IsNullOrEmpty
                         .Concat(AddressParts.Where(x => x.Value == null))
                         .Select((x, i) => new { Key = i + 1, x.Value })
                         .ToDictionary(x => x.Key, x => x.Value);

要在SortedList<,>中获取它,只需将字典传递给它的构造函数即可。

SortedAddressParts = new SortedList<int, string>(sorted);

答案 3 :(得分:-1)

如果您希望地址也排序,您可以使用类似

的内容
int i = 1;
List<string> values = AddressParts.Values.OrderByDescending(c => c).ToList<string>();
SortedAddressParts = new SortedList<int, string>(values.ToDictionary(s => i++));

但这也会对地址进行排序。