代码之家  ›  专栏  ›  技术社区  ›  Junior Mayhé

C#-有什么聪明的方法可以从对象集合中获取int数组吗?

  •  1
  • Junior Mayhé  · 技术社区  · 16 年前

    我们的想法是有一个方法可以接收“User”类的集合:

    public class User { 
        public int UserId {get;set;}
        public string UserName {get;set;}
    }
    

    List<int> repeatedUserIds = (from item in list 
                                 select item.UserId).ToList();
    List<int> uniqueUserIds = ((from n in repeatedUserIds 
                                 select n).Distinct()).ToList();
    

    有没有办法创造一个聪明的方法来达到这个目的?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Lee    16 年前

    可以创建扩展方法:

    public int[] GetUniqueIds<T>(this IEnumerable<T> items, Func<T, int> idSelector)
    {
        return items.Select(idSelector).Distinct().ToArray();
    }
    

    像这样使用:

    int[] uniqueUserIds = list.GetUniqueIds(u => u.UserId);
    
        2
  •  2
  •   Jon Skeet    16 年前

    好吧,就我个人而言,我不想为查询表达式操心——但剩下的就可以了:

    List<int> repeatedUserIds = list.Select(item => item.UserId)
                                    .ToList();
    List<int> uniqueUserIds = repeatedUserIds.Distinct()
                                             .ToList();
    

    repeatedUserIds 对于其他事情,不必费心中间调用 ToList()

    List<int> uniqueUserIds = list.Select(item => item.UserId)
                                  .Distinct()
                                  .ToList();
    

    (我通常喜欢将每个操作放在单独的行上,但当然不必这样做。)

    请注意,您的 文本 请求数组,但是 一直以来 List<int> int[] 而不是 列表<内部> ,只需更改 呼叫 ToArray() .

        3
  •  0
  •   James Curran    16 年前
     List<int> uniqueUserIds = (from n in list  
                                select item.UserId).Distinct().ToList();