我剛開始學習C#。我想合并 2 個串列并回傳輸出。例如:
清單 1 = 彼得、托尼、史蒂夫
清單 2 = 帕克、斯塔克、羅杰斯
最終名單/輸出:
彼得帕克托尼
斯塔克
史蒂夫羅杰斯
這是我的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
var projectTeam = "Group Avengers";
Console.WriteLine("Avengers Assemble");
string[] firstNames = {"Peter", "Tony", "Steve"};
string[] lastNames = {"Parker", "Stark", "Rogers"};
IList<string> combinedNames = new List<string>();
foreach (string firstName in firstNames)
{
foreach (string lastName in lastNames)
{
Console.WriteLine(firstName lastName);
}
}
}
}
}
實際輸出:
Avengers Assemble
PeterParker
PeterStark
PeterRogers
TonyParker
TonyStark
TonyRogers
SteveParker
SteveStark
SteveRogers
預期輸出:
Avengers Assemble
Peter Parker
Tony Stark
Steve Rogers
uj5u.com熱心網友回復:
您可以使用for-loop 并通過索引訪問串列:
for(int i = 0; i < Math.Min(firstNames.Length, lastNames.Length); i )
{
Console.WriteLine(firstNames[i] lastNames[i]);
}
最好將這兩個相關資訊存盤在一個公共類中,例如Avenger使用屬性FirstName和LastName.
鏈接兩個相關串列的另一種方法是 LINQ Zip:
var zippedAvengers = firstNames.Zip(lastNames, (f,l) => f " " l);
foreach(string name in zippedAvengers)
Console.WriteLine(name);
uj5u.com熱心網友回復:
在您的代碼中,您只需要一個回圈,它應該是for,而不是foreach
for (var i = 0; i< firstNames.Length; i )
{
string firstName = firstNames[i];
string lastName = lastNames[i];
Console.WriteLine(firstName lastName);
}
您也可以將其替換為IEnumerable.Zip(https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.zip?view=net-6.0)
firstNames
.Zip(lastNames, (first, last) => first last)
.ToList()
.ForEach(x=>Console.WriteLine(x));
請注意,這兩種方法都假定兩者都firstNames具有lastNames相同數量的元素。
uj5u.com熱心網友回復:
如果你改變回圈:
for (int i=0; i < firstNames.Count; i )
{
Console.WriteLine(firstNames[i] " " lastNames[i]);
}
它會作業的。
作為旁注 - 在 .NET 上的較新版本中,您可以使用 $"{firstNames[i]} {lastNames[i]}"
另外,.Zip 解決方案(由 Serg 提出):
firstNames
.Zip(lastNames, (first, last) => first " " last)
.ToList()
.ForEach(x=>Console.WriteLine(x));
會更有效率
uj5u.com熱心網友回復:
您正在做的是將第一個串列的每個元素與第二個串列的每個元素進行匹配。但是,如果我理解正確的話,您想要做的是將第一個串列的第一個元素與第二個串列的第一個元素匹配。
為了做到這一點,我不會給你代碼,所以你可以學習,但我可以告訴你去哪里:
- 確保您的串列大小相同,否則您將在嘗試訪問不存在的索引時遇到例外
- 使用
forloop 而不是foreach,它們在這種情況下不那么本能但更有用。對于兩個串列的每個索引,使第三個串列(結果)的相同索引對應于兩者的串聯,例如:
result[0] = firstList[0] secondList[0];
(為了兩者之間有空格,必須在第一個和第二個串列項之間添加一個空格)
uj5u.com熱心網友回復:
這可以通過 LINQ 完成Zip():
var fullNames = firstNames.Zip(lastNames, (first, last) => $"{first} {last}")
Zip 獲取兩個串列并同時遍歷它們,將函式應用于每一對。
uj5u.com熱心網友回復:
您無緣無故地運行了兩個 for 回圈。只需從 i = 0 到 i = 3(不包括)運行一個回圈。然后您可以從兩個串列中選擇第 i 個元素。例子。對于 i = 0, firstNames[0] = "Peter" lastNames[0] = "Parker" 你可以列印
Console.WriteLine(firstNames[i] " " lastNames[i]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411173.html
標籤:
