C#已按两个值对列表排序,需要比较
我有一个按两个值排序的列表。它包含一个字符串、一个TimeSpan和一个整数。它是由两个最先订购的。我将向您展示一个它包含的示例:C#已按两个值对列表排序,需要比较,c#,.net,C#,.net,我有一个按两个值排序的列表。它包含一个字符串、一个TimeSpan和一个整数。它是由两个最先订购的。我将向您展示一个它包含的示例: E2801160600002066ED71483 09:36:37.6367671 1 E2801160600002066ED71483 09:36:38.1968231 1 E2801160600002066ED71483 09:36:38.8968931 2 E2801160600002066ED71483 09:36:39.4969531 2 E2801160
E2801160600002066ED71483 09:36:37.6367671 1
E2801160600002066ED71483 09:36:38.1968231 1
E2801160600002066ED71483 09:36:38.8968931 2
E2801160600002066ED71483 09:36:39.4969531 2
E2801160600002066ED71483 09:36:40.2020236 2
E2801160600002066ED71493 09:36:37.6367671 2
E2801160600002066ED71493 09:36:38.3968431 2
E2801160600002066ED71493 09:36:39.0969131 1
最后一个整数表示两个天线,第一个是第一个天线,第二个是第二个天线。它总是朝着一个方向发展,我的意思是,如果它先是朝第一个方向发展,然后再朝第二个方向发展,这意味着产品正在走向外部。如果首先是第二个,然后是第一个,这意味着产品进入了内部
因此,我需要知道如何迭代列表并比较整数,以了解产品是在外部还是在内部
在本例中,第一个产品(字符串以83结尾)在外,第二个产品(字符串以93结尾)在内。所以你知道我的意思。假设你的模型是这样的:
class Data
{
string ProductId {get; set;}
Timespan Timespan {get; set;}
int Antenna {get; set;}
}
与您的排序列表
List<Data> data = ...
…然后将产品分组投影到一个新列表(IEnumerable
,真的),并通过检查组中的第一个项目是否具有天线ID 1或2来确定产品是否传入或传出
var productDirections = productEntries.Select(
product => new
{
Id = product.Key,
IsIncoming = product.First().Antenna == 2
});
之后,您可以迭代新列表并检查IsIncoming
布尔值,以获得产品的方向
foreach (var product in productDirections)
{
if (product.IsIncoming)
handleIncoming(product.Key);
else
handleOutgoing(product.Key);
}
假设您的模型看起来是这样的:
class Data
{
string ProductId {get; set;}
Timespan Timespan {get; set;}
int Antenna {get; set;}
}
与您的排序列表
List<Data> data = ...
…然后将产品分组投影到一个新列表(IEnumerable
,真的),并通过检查组中的第一个项目是否具有天线ID 1或2来确定产品是否传入或传出
var productDirections = productEntries.Select(
product => new
{
Id = product.Key,
IsIncoming = product.First().Antenna == 2
});
之后,您可以迭代新列表并检查IsIncoming
布尔值,以获得产品的方向
foreach (var product in productDirections)
{
if (product.IsIncoming)
handleIncoming(product.Key);
else
handleOutgoing(product.Key);
}
感谢阿本丹扎,谢谢你的帮助
var productDirection = productEntries.Select(
product => new
{
Product = product.Key,
IsIncoming = product.First().antena == 2 && product.Last().antena == 1,
IsOutgoing = product.First().antena == 1 && product.Last().antena == 2,
StillInside = product.First().antena == 1
});
foreach (var product in productDirection)
{
if (product.IsIncoming)
{
// handle incoming products
Console.WriteLine("The product " + product.Product + " is incoming");
}
else if (product.IsOutgoing)
{
// handle outgoing products
Console.WriteLine("The product " + product.Product + " is outgoing");
}
else if (product.StillInside)
{
//handle still inside products
Console.WriteLine("The product " + product.Product + " is still inside");
}
else
{
//handle still outside products
Console.WriteLine("The product " + product.Product + " is still outside");
}
}
感谢阿本丹扎,谢谢你的帮助
var productDirection = productEntries.Select(
product => new
{
Product = product.Key,
IsIncoming = product.First().antena == 2 && product.Last().antena == 1,
IsOutgoing = product.First().antena == 1 && product.Last().antena == 2,
StillInside = product.First().antena == 1
});
foreach (var product in productDirection)
{
if (product.IsIncoming)
{
// handle incoming products
Console.WriteLine("The product " + product.Product + " is incoming");
}
else if (product.IsOutgoing)
{
// handle outgoing products
Console.WriteLine("The product " + product.Product + " is outgoing");
}
else if (product.StillInside)
{
//handle still inside products
Console.WriteLine("The product " + product.Product + " is still inside");
}
else
{
//handle still outside products
Console.WriteLine("The product " + product.Product + " is still outside");
}
}
请提供列表类型的定义好吗?存储
字符串
、Timespan
和int
的属性如何调用。这将使回答更容易。创建一个类来保存这些值,分离并解析字符串,并用这些值填充该类,然后在列表上迭代以确定所需内容。您能提供列表类型的定义吗?存储字符串
、Timespan
和int
的属性如何调用。这将使回答更容易。创建一个类来保存这些值,分离并解析字符串,并用这些值填充该类,然后在列表上迭代以确定所需内容。当两个天线都能识别标记时,您的解决方案工作得很好。但现在我有了一个新问题。当只有第一根天线读到它时,它就说产品在外面,当只有第二根天线读到它时,它就说产品在里面。这是无效的,因为当第一根天线只读取时,产品仍在内部,当第二根天线只读取时,产品仍在外部。无论如何,谢谢你的帮助,我希望你能帮助我,真的非常感谢!对不起,我不太明白。你的意思是天线IDint
可以为空吗?你能用这些案例更新你上面的示例行吗?我修复了它,我的意思是,如果该对象仅由2号天线读取,则该产品仍在外部,且未进入。如果该产品仅由1号天线读取,则该产品仍在内部,且未输出。查看我的新答案以查看修复。当两个天线都能识别标签时,您的解决方案效果良好。但现在我有了一个新问题。当只有第一根天线读到它时,它就说产品在外面,当只有第二根天线读到它时,它就说产品在里面。这是无效的,因为当第一根天线只读取时,产品仍在内部,当第二根天线只读取时,产品仍在外部。无论如何,谢谢你的帮助,我希望你能帮助我,真的非常感谢!对不起,我不太明白。你的意思是天线IDint
可以为空吗?你能用这些案例更新你上面的示例行吗?我修复了它,我的意思是,如果该对象仅由2号天线读取,则该产品仍在外部,且未进入。如果该产品仅由1号天线读取,则该产品仍在内部,且未输出。查看我的新答案以查看修复。