代码之家  ›  专栏  ›  技术社区  ›  David

如何在锯齿数组中找到唯一值

  •  5
  • David  · 技术社区  · 16 年前

    我想知道如何计算锯齿数组中唯一值的数量。

    我的域对象包含具有空格分隔值的字符串属性。

    class MyObject
    {
        string MyProperty; //e.g = "v1 v2 v3"
    }
    

    给予 我的对象

    更好

    db.MyObjects.Where(t => !String.IsNullOrEmpty(t.MyProperty))
        .Select(t => t.Categories.Split(new char[] { ' ' },
            StringSplitOptions.RemoveEmptyEntries))
        .ToArray()
    

    array[0] = { "v1", "v2", "v3" }
    array[1] = { "v1" }
    array[2] = { "v4", "v2" }
    array[3] = { "v1", "v5" }
    

    从所有值中,唯一项是 第1版 , 第2版 , 第4版 , .

    唯一项的总数为 5. .

    是否有一个解决方案(可能使用linq)只返回唯一值或返回唯一值的数目?

    2 回复  |  直到 16 年前
        1
  •  8
  •   Mark Byers    16 年前

    是的,对于LINQ,这非常简单。首次使用 SelectMany 将锯齿状阵列展平为 IEnumerable<string> 包含所有值,然后调用 Distinct 要仅选择唯一值:

    IEnumerable<string> uniqueValues = array.SelectMany(x => x).Distinct();
    

    如果你想数一数,那就用 Count :

    IEnumerable<string> uniqueValues = array.SelectMany(x => x).Distinct();
    int uniqueCount = uniqueValues.Count();
    
        2
  •  5
  •   Anthony Pegram    16 年前

    查询表达式方法无效

    var query = (from arr in array
                 from value in arr
                 select value).Distinct();