为了账号安全,请及时绑定邮箱和手机立即绑定

求一个简单的LINQ语句

求一个简单的LINQ语句

泛舟湖上清波郎朗 2018-12-07 00:06:49
IDictionary<int, IList<int>> secondlevel = new Dictionary<int, IList<int>>(); IDictionary<int, IList<int>> thirdlevel = new Dictionary<int, IList<int>>(); secondlevel.Add(1, new List<int>(new int[] { 1, 2 })); secondlevel.Add(2, new List<int>(new int[] { 3 })); secondlevel.Add(3, new List<int>(new int[] { 4, 5, 6 })); thirdlevel.Add(1, new List<int>(new int[] { 5, 6, 7, 8, 20, 13, 24 })); thirdlevel.Add(2, new List<int>(new int[] { 23 })); thirdlevel.Add(3, new List<int>(new int[] { 22, 25, 26, 27 })); thirdlevel.Add(4, new List<int>(new int[] { 19, 28, 29, 30, 31, 38, 33 })); thirdlevel.Add(5, new List<int>(new int[] { 32, 35 })); thirdlevel.Add(6, new List<int>(new int[] { 34, 36, 37 })); 定义了两个目录,二级目录的值是三级目录的键,现在给定thirdlevel中的一个值,得到它所在分支是第几个,比如5结果是0,6结果是1,23结果7,22结果是0,25的结果是1,19是0,28是1,怎么写啊,谢谢!
查看完整描述

14 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

int GetItemIndex(int index, IDictionary<int, IList<int>> t)
        {
            var result = from x in t where x.Value.Contains(index) select x.Value.IndexOf(index);
            if (result == null || result.Count() < 1) return -1;
            return result.FirstOrDefault();
        }

这个其实真不用那么复杂

查看完整回答
反对 回复 2019-01-21
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

没明白你的意思。描述清除点。什么分支什么结果,二级与三级有事什么关系。

查看完整回答
反对 回复 2019-01-21
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

二级其实就是对三级进行分类啊,仔细看,二级的值是三级的键

查看完整回答
反对 回复 2019-01-21
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

@happydaily: 这个明白了,那你的什么值得到什么分支的第几个是什么意思?没看懂。

查看完整回答
反对 回复 2019-01-21
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

@笨笨蜗牛: 分支根据二级目录来的,二级目录共有三个分支,1下面到三级目录的值有5, 6, 7, 8, 20, 13, 24和23;     2下面有22, 25, 26, 27;   3下面有19, 28, 29, 30, 31, 38, 33和 32, 35和 34, 36, 37,

这样分成三组数据,给定一个值,求所在分组的index

查看完整回答
反对 回复 2019-01-21
?
烙印99

TA贡献1829条经验 获得超13个赞

@happydaily: 刚写了下,太复杂了。

下面的代码是分条写的:

    int value = 3;
    var k = from c in thirdlevel where c.Value.Contains(value) select new { k = c.Key, index = c.Value.IndexOf(value) };
    var r = k.SingleOrDefault() ?? new { k = 0, index = 0 };
    var m = (from c in secondlevel where c.Value.Contains(r.k) select c.Value).Single();
    var n = m.Where(o => m.IndexOf(o) < m.IndexOf(r.k)).Sum(o => thirdlevel[o].Count);
    var index = n + r.index;

如果要写在一起也不是不可以,但那个编写过程很头痛,而且理解起来也会很难。

查看完整回答
反对 回复 2019-01-21
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

@笨笨蜗牛: 这个是另外一个版本的,整合到了一起,不过中间还是有几个地方感觉没简化好,需要再斟酌,可惜没那感觉了。

    var q = from c in thirdlevel
            from d in secondlevel
            where c.Value.Contains(value) && d.Value.Contains(c.Key)
            select c.Value.IndexOf(value)
                        +
                   d.Value
                        .Where(o=>d.Value.IndexOf(o) < d.Value.IndexOf(c.Key))
                        .Sum(o=>thirdlevel[o].Count);
    var index = q.Single();
查看完整回答
反对 回复 2019-01-21
?
开满天机

TA贡献1786条经验 获得超13个赞

    int i=5;
            var second = from m in secondlevel
                         where m.Value.Contains((from n in thirdlevel
                                                 where n.Value.Contains(i)
                                                 select n).FirstOrDefault().Key)
                         select m;

查看完整回答
反对 回复 2019-01-21
?
慕沐林林

TA贡献2016条经验 获得超9个赞

@happydaily: 是哦。我不知道你要什麽哦。不是要2的嗎

查看完整回答
反对 回复 2019-01-21
?
阿晨1998

TA贡献2037条经验 获得超6个赞

          int i = 5;
            var second = from m in secondlevel
                         let s=m.Value.IndexOf((from n in thirdlevel
                                                 where n.Value.Contains(i)
                                                 select n).FirstOrDefault().Key)
                         where m.Value.Contains((from n in thirdlevel
                                                 where n.Value.Contains(i)
                                                 select n).FirstOrDefault().Key)
                         select s;

 

@無限遐想: 

查看完整回答
反对 回复 2019-01-21
?
守着一只汪

TA贡献1872条经验 获得超3个赞

@無限遐想: 分支根据二级目录来的,二级目录共有三个分支,1下面到三级目录的值有5, 6, 7, 8, 20, 13, 24和23;     2下面有22, 25, 26, 27;   3下面有19, 28, 29, 30, 31, 38, 33和 32, 35和 34, 36, 37,

这样分成三组数据,给定一个值,求所在分组的index

查看完整回答
反对 回复 2019-01-21
?
慕慕森

TA贡献1856条经验 获得超17个赞

@happydaily: 我上面 的linq就能實現,要不你測試一下哦。

查看完整回答
反对 回复 2019-01-21
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

@無限遐想: 试过了就是不对,

查看完整回答
反对 回复 2019-01-21
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

@happydaily: 我根據5.找出是等於1個索引。我都是測試過的。用你的代碼。

查看完整回答
反对 回复 2019-01-21
  • 14 回答
  • 0 关注
  • 412 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信