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
的字典会更好,并且节省了大量将字符转换为整数的工作。。。