我有一个像这样的方法static List<int> Compare(List<int> a, List<int> b)
我希望这个功能return [aPoints bPoints]
类似 [2 1]
但是,我坚持使用 if
循环后存储值。陈述并将其放入分数中。
我试过这个:
static List<int> Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
List<int> score = new List<int>() { aPoints, bPoints };
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
return score;
}
并将它们打印在:
static void Main(string[] args){}
最佳答案
这是一个非常简单的解决方案。只需创建一个空列表,然后添加 aPoints
和bPoints
在返回调用者之前立即执行此操作。
static List<int> Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
List<int> score = new List<int>();
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
score.Add(aPoints);
score.Add(bPoints);
return score;
- 或者您也可以直接在
return
处创建您的列表。像这样:
static List<int> Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
return new List<int>() { aPoints, bPoints};
- 此外,您可以使用语义上更正确的方式,因为您的列表始终有 2 个值。使用tuple :
static (int aPoints, int bPoints) Compare(List<int> a, List<int> b)
{
int aPoints = 0;
int bPoints = 0;
for (int i = 0; i < 3; i++)
{
if (a[i] > b[i])
{
aPoints++;
}
else if (a[i] < b[i])
{
bPoints++;
}
}
return (aPoints, bPoints);
}
跟进你的评论,如果你想打印Compare
的内容那么,方法返回 List<int>
你可以这样做:
List<int> ret = Compare(someList, anotherList);
foreach (int n in ret)
{
Console.WriteLine(n);
}
- 或者您可以使用经典的
for
像这样循环:
List<int> ret = Compare(someList, anotherList);
for (int i = 0; i < 2; i++)
{
Console.WriteLine(ret[i]);
}
但是,在此循环中,假设您的列表始终内部包含 2 个元素。一般方法是将循环定义更改为 for (int i = 0; i < ret.Count; i++)
这样它就会迭代列表中的每个可用项目,就像foreach
一样循环。
关于c# - 从方法返回 List<int> 并在 C# 中打印值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58881168/