【问题标题】:Getting distinct values from an ArrayList in C#从 C# 中的 ArrayList 获取不同的值
【发布时间】:2014-04-09 16:49:52
【问题描述】:

我有一个看起来像这样的ArrayList

clientArray 是这样形成的:

ArrayList clientArray = new ArrayList();

foreach (Dictionary<string, object> media in mediaList)
{
    // get the Advertisers container object
    Dictionary<string, object> clientContainer = (Dictionary<string, object>)media["Advertisers"];

    //get the list of Advertisers (clients)
    var clientList = clientContainer["Advertiser"] as ArrayList;
    var clientListList = clientList.Cast<Dictionary<string, object>>().ToList();

    //add fields not olalready in the dictionary
    clientListList.ForEach(d => d.Add("MediaCode", media["Code"].ToString()));
    clientListList.ForEach(d => d.Add("MediaName", media["Name"].ToString()));
    clientListList.ForEach(d => d.Add("AgencyAlpha", mediaResponse["AgencyAlpha"].ToString()));
    clientListList.ForEach(d => d.Add("CreatedBy", System.Reflection.Assembly.GetExecutingAssembly().FullName.ToString()));
    clientListList.ForEach(d => d.Add("CreatedDt", DateTime.Now));

    foreach (Dictionary<string, object> client in clientListList)
    {
        clientArray.Add(client);
    }
}

这是 clientArray 的样子:

{
  "client": [
    {
      "Code": "ABC",
      "Name": "ABC Inc",
      "BusinessKey": "ABC123",
      "MediaCode": "I",
      "MediaName": "Interactive",
      "AgencyAlpha": "UB",
      "CreatedBy": "DataApi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
      "CreatedDt": "2014-04-08T12:47:54.5855957-04:00"
    },
    {
      "Code": "DEF",
      "Name": "DEF Inc",
      "BusinessKey": "DEF456",
      "MediaCode": "I",
      "MediaName": "Interactive",
      "AgencyAlpha": "UB",
      "CreatedBy": "DataApi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
      "CreatedDt": "2014-04-08T12:47:54.5855957-04:00"
    },
etc...

我需要将所有 DISTINCT Codes 放入一个列表中。到目前为止,我所拥有的是返回 all Codes(不是我想要的)。我该怎么做?

List<string> listOfCodes = new List<string>();

foreach (Dictionary<string, object> obj in clientArray as IEnumerable)
{
    listOfCodes.Insert(0, obj["Code"].ToString());
}

listOfCodes.Distinct().ToList();

【问题讨论】:

  • 我在您的代码中没有看到任何数组列表。我看到List&lt;T&gt; 上面发布的另一件事是 json blob。尝试更准确地陈述您的问题,否则您可能不会得到好的答案。

标签: c# linq arraylist distinct


【解决方案1】:

你应该这样做:

ArrayList = GetMyArrayList() ;

...

List<string> ListOfCodes = clientArray
.Cast<Dictionary<string,object>>()
.Select( x => x["Code"] as string)
.Distinct( StringComparer.OrdinalIgnoreCase )
.ToList()
;

另一种方法是使用HashSet&lt;T&gt;SortedSet&lt;T&gt;,例如:

IEnumerable<string> codeBag = clientArray
                              .Cast<Dictionary<string,object>>()
                              .Select( x => x["Code"] as string)
                              .Where( s => !string.IsNullOrEmpty(s) )
                              ;
HashSet<string>     codeSet = new HashSet<string>( codeBag , StringComparer.OrdinalIgnoreCase ) ;

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多