C# 使用Linq查询表达式语法基于索引和索引值连接两个数组
我想连接两个数组,其中一个数组包含索引值,另一个数组包含索引位置C# 使用Linq查询表达式语法基于索引和索引值连接两个数组,c#,linq,C#,Linq,我想连接两个数组,其中一个数组包含索引值,另一个数组包含索引位置 string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; int[] nums = new[] { 2, 32, 70 }; string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "F
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
我想要的输出:
2 Two
32 Three-Two
70 Seven-Zero
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
我试着在下面提问
var strValuList = (from d in nums
from p in numStrings.Select((value, index) => new { value = value, index = index })
where p.index == d
select new { num = d, p.value}).ToList();
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
但它只会回来
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
2两个string[]numStrings=new[]{“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
int[]nums=new[]{2,32,70};
var dict=新字典();
foreach(以nums为单位的变量n)
{
var str=string.Join(“-”,n.ToString()。选择(s=>numStrings[Convert.ToInt32(s.ToString())));
dict[n]=str;
}
先自己试试,然后看答案:
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
提示:
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
(将鼠标悬停在黄色部件上以获得答案[过一段时间我将拆下扰流板部件])
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
string[]result=nums.Select(n=>string.Join(“-”,SplitNum(n).Reverse().Select(i=>numStrings[i])).ToArray();
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
我解决它没有太多的复杂性。谢谢你的建议,杰伦·莫斯特
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
int[] nums = new[] { 2, 32, 70 };
(from d in nums
select new
{
num = d,
parts = d.ToString().Select(o=> Convert.ToInt32(o.ToString())),
parts2 = d.ToString().Select(o => numStrings[Convert.ToInt32(o.ToString())]),
parts3 = string.Join("-",d.ToString().Select(o => numStrings[Convert.ToInt32(o.ToString())]).ToArray())
}).Dump();
LinqPad中的输出:
这是众多方法之一:
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
int[] nums = new[] { 2, 32, 70 };
var dict = new Dictionary<int, string>();
foreach(var n in nums)
{
var str = string.Join("-", n.ToString().Select(s => numStrings[Convert.ToInt32(s.ToString())]));
dict[n] = str;
}
void Main()
{
string[] numStrings = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
int[] nums = new[] { 2, 32, 70 };
Func<int, string> numToWord = (x) => {
List<string> words = new List<string>();
do {
words.Add( numStrings[x%10] );
x /= 10;
} while (x > 0);
var w = words.Reverse<string>();
return string.Join("-",w);
};
var result = nums.Select(n => numToWord(n));
foreach (var element in result)
{
Console.WriteLine(element);
}
}
void Main()
{
string[]numStrings=new[]{“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
int[]nums=new[]{2,32,70};
Func numToWord=(x)=>{
列表单词=新列表();
做{
添加(numStrings[x%10]);
x/=10;
}而(x>0);
var w=words.Reverse();
返回字符串。Join(“-”,w);
};
var result=nums.Select(n=>numToWord(n));
foreach(结果中的var元素)
{
控制台写入线(元素);
}
}
所以。。。。你试了什么?看起来像是一项任务。试试你自己,否则你什么也学不到。我们可以构造最漂亮的linq查询/字符串联接来解决这个问题。但是你能阅读/理解它们吗?列出strvallist=(从nums中的d开始,从numStrings.Select中的p开始((value,index)=>new{value=value,index=index}),其中p.index==d选择p.value);您可以更新您的问题而不是评论;-)在一个查询中执行此操作比必要的要复杂得多。提示:do{yield return numStrings[n%10];n/=10;}而(n!=0)
。(.ToString
检查每个字符是另一种方法,尽管这可能被认为是“作弊”:nums.Select(n=>(“”+n).Select(c=>numStrings[c-'0'])
)从数字中提取数字所做的循环当然可以写入LINQ查询中,您可以将其与数字数组连接起来。这样做不是特别明智。为什么需要if(n<10)
part?这很好,但理解起来很复杂。正如我从你的答案中学到的那样,我对它投了赞成票。@DmitryS很好,你总是可以使用string/ToString()
s、char
s和int.Parse
来获得想要的结果,但我觉得不自然(如果你使用$“{num}”
而不是num.ToString()
,但无论如何,对于一个简单的数学任务来说,要做这么多的操作(从数字中获取独立的数字),需要做太多的string->char->string->int
转换)。对于linq部分,它并不太复杂,OP只需要仔细阅读并理解该表达式的每个部分。您确实意识到dict
在语义上等于numStrings
,对吗dict[x]==numStrings[x]
用于0
和9
之间的所有x
。但是如果您真正想要查找的是字符串中的char
字符,那么可能使用键类型char
的字典会更好,并且节省了大量将字符转换为整数的工作。。。