2

如果我有以下邮寄地址:

地址 1:空
地址
2:36 地址 3:Moonrise Drive
地址 4:空地址
5:伦敦

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

Address1 : 36 Address2
: Moonrise Drive
Address3: London Address4:
NULL
Address5: 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

4 回答 4

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;
}

它适用于任意数量的地址行,您只需将它们首先包装在任何类型的列表中。

于 2013-10-16T10:56:26.143 回答
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();
于 2013-10-16T10:52:26.353 回答
0

我认为您想保留 intkey并更改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);

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

SortedAddressParts = new SortedList<int, string>(sorted);
于 2013-10-16T11:21:16.637 回答
-1

如果你也想对地址进行排序,你可以使用类似的东西

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

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

于 2013-10-16T11:39:39.210 回答