我研究了数组、数组列表、字典的各种不同方式...但由于我习惯了 PHP,所以我不完全确定收集以下信息的最佳方式。
我的程序循环遍历每个用户,如果他们是位置 ID,我想将其添加到某种集合/数组中。预计不同的用户将具有相同的位置 ID。
如果位置 ID 相同,我需要增加该位置 ID 出现次数的整数。
示例:
User1 - Location1
User2 - Location3
User3 - Location3
Location1 = 1
Location3 = 2
此外我需要以某种方式将每个用户 ID 附加到此集合中。所以 Location3/2 次出现/user2/user3
我已经花了大约两个小时试图找出最好的方法,多维数组、数组列表、字典的所有不同方法都有点令人困惑,因为它们对我的 PHP 知识来说似乎都是抽象的。我认为 C# 以完全不同的方式处理数组。
本质上,具有唯一位置 ID/出现次数/和用户集合的集合需要存储在可以作为参数传递到程序中其他位置的内容中。
我制作了一个 PHP 脚本,它完全符合我的要求
foreach($call["data"] as $v)
{
// Foreach USER ($v containing their unique ID and location ID.)
$user_id = $v["id"];
$location_id = $v["location"]["id"];
// This adds the location ID as the key within the array, followed by every user who has it. I don't need a count in this case, as I could just count the number of users.
$collection[$location_id][$user_id] = null;
}
这反过来会在使用 print_r 打印时创建此数组
[106078429431815] => Array
(
[620790873] =>
[626276302] =>
[100000152470577] =>
)
(输出的一小部分)。 - 添加了 PHP 示例。 有人知道如何让 C# 以与 PHP 数组相同的方式收集相同的信息吗?
最佳答案
using System.Linq;
var grouppingByLocation = users.GroupBy(u => u.LocationID);
foreach (var g in grouppingByLocation)
{
Console.WriteLine("Location id: {0}", g.Key);
foreach (var u in g)
{
Console.WriteLine("User id: {0}", u.ID);
}
}
参见Enumerable.GroupBy()了解更多详情。
这是一个Extension Method超过 IEnumerable<T>
由任何接受 lambda expression 的内置集合(例如 Array T[]
、 List<T>
、 Dictionary<K,V>
等)实现的接口(interface)指向您要分组的类集合的属性。
关于c# - 构建唯一 ID 及其计数集合的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803994/