在 C# 中将 2 个本地字符串 [] 添加到单个数组中
Posted
技术标签:
【中文标题】在 C# 中将 2 个本地字符串 [] 添加到单个数组中【英文标题】:Add 2 local string[] into a single array in C# 【发布时间】:2019-01-30 05:10:46 【问题描述】:我们从 2 台客户端计算机向我们的第 3 台服务器计算机接收两个字符串。该数组当前是一维的。我们需要将result
和answer
数组的每个成员相加并输出第三个数组。但是我们将它们用作局部变量string[]
。
我们如何将answer
和result
的值添加到单个数组中。
例如:
answer[0]+result[0]= final[0]
..........
answer[76]+result[76]=final[76]
更新了代码
namespace ExampleLib.Server
public class Server
string[] answer = new string[77];
string[] result = new string[77];
private void ClientReceiveData(object sender, ConnectedClient.NetDataEventArgs e)
if (string.IsNullOrEmpty(e.Message) == false)
if (e.ID == 0)
answer = e.Message.Split(',');
if (e.ID==1)
result = e.Message.Split(',');
var final = answer.Zip(result, (x, y) => x + y).ToArray();
Trace.WriteLine(String.Join(Environment.NewLine, final));
更新 1(使用 Zip 方法):
【问题讨论】:
你是指数组的长度还是它的成员值的长度? 有很多方法可以做到这一点。您可以使用 LINQ 在单行中完成此操作,但如果您是 C# 新手,这可能无法帮助您学到很多东西。 “老式”方法是创建一个大小合适的新数组,然后使用for
循环根据现有数组填充它。但是,目前还有另一个设计问题:您需要在收到数组时保存收到的数组,否则您一次只能拥有一条数据。
@DaisyShipton 澄清一下,我们收到的字符串来自客户端计算机的 TCP/IP 流,for 循环是否仍然有效?
当您获得包含预期数据的字符串数组时,您如何获得它们完全无关紧要。
我有点困惑...您为 e.ID == 0 和 e.ID == 1 运行相同的东西...为什么不将这两个条件合二为一呢?输出将只是每个单独重复的字符串。这是故意的吗?
【参考方案1】:
尝试使用Zip
方法,像这样:
var final = answer.Zip(result, (x, y) => x + y).ToArray();
【讨论】:
如果您使用的是Zip
,为什么还要单独选择每个部分?你可以在那个 lambda 表达式中做任何你想做的事情,所以你可以很容易地做出这个声明:var final = answer.Zip(result, (x, y) => x + y).ToArray();
既然answer
和result
都在两个不同的 if 循环中声明,我应该把 Zip 方法放在哪里?
如果它们在不同的循环中声明,您只需在循环之外声明它们并填充它们。
我们在 if 循环中声明了变量,例如 string[] answer = new string[77];
string[] result = new string[77];
但是当我们打印像 `Trace.WriteLine(String.Join(Environment.NewLine, final));` 这样的最终字符串时所以我们看到结果并排显示并且没有添加数组我将添加我在问题中看到的结果的图片。
我认为这里的问题与组合字符串无关,而是根据您的代码,您只有answer
或result
。这里没有循环,你不能同时得到,因为e.ID
不能同时是0和1。你需要先从两个客户端获取数据,传递给其他方法,然后才能合并。
以上是关于在 C# 中将 2 个本地字符串 [] 添加到单个数组中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2010 中将数据保存到本地数据库?