【问题标题】:How to find unique values in jagged array如何在锯齿状数组中找到唯一值
【发布时间】:2011-02-04 07:06:11
【问题描述】:

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

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

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

鉴于 MyObject列表,我如何确定唯一值的数量?

以下 linq 代码返回一个由锯齿状数组值组成的数组。一种解决方案是存储一个临时的单个项目数组,循环遍历每个锯齿状数组,如果值不存在,则添加它们。然后一个简单的计数将返回唯一数量的值。但是,想知道是否有 更好的 解决方案。

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

从所有值来看,唯一项是 v1v2v3v4v5

唯一项目的总数为 5

是否有可能使用 linq 的解决方案,仅返回唯一值或返回唯一值的数量?

【问题讨论】:

    标签: c# linq arrays jagged-arrays


    【解决方案1】:

    是的,使用 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】:

      查询表达式方法是

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

      【讨论】:

      • 仅供读者参考……这个答案和 Mark Byers 的答案实际上是相同的,但语法不同。基本答案是“选择许多”。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2020-04-02
      • 1970-01-01
      • 2017-09-21
      相关资源
      最近更新 更多