您的位置:首页 > 其它

练习LINQ:同时操作二维和一维数组,把二维数组转为一维,计算一维和二维值,字符串组合,计算数组和,数组筛选,排序

2015-08-02 18:01 513 查看
string[] 数据 = { "甲;乙;丁;|60", "甲;乙;|40", "乙;丁;|40", "丙;|20" };
        Int32[] 值组 = 数据.Select(qq => qq.Split('|')[1]).Select(ww => int.Parse(ww)).ToArray();
        string[][] 分组 = 数据.Select(aa => aa.Split(';').Where(dd => !dd.Contains("|")).ToArray()).ToArray();
        string[][] 重组 = 分组.Select((ee, ind) => ee.Select(rr => rr + "|" + (值组[ind] / ee.Length).ToString()).ToArray()).ToArray();
        string[] 二一 = string.Join(" ", 重组.Select(yy => string.Join(" ", yy))).Split(' ');
        Char[] 单 = 二一.Select(uu => uu[0]).ToArray().Distinct().OrderByDescending(gg=>gg).ToArray();
        string[][] 合 = 单.Select(ii => 二一.Where(oo => oo[0] == ii).ToArray()).ToArray();
        string[] 值 = 合.Select(pp => string.Join("-", pp.Select(ll => ll.Split('|')[1]).Select(jj => int.Parse(jj)).Sum())).ToArray();
        Int32[] 值数 = 合.Select(pp => pp.Select(ll => ll.Split('|')[1]).Select(jj => int.Parse(jj)).Sum()).ToArray();
        Int32[] 数值 = 合.Select(pp => string.Join("-", pp.Select(ll => ll.Split('|')[1]))).ToArray().Select(kk => kk.Split('-').Select(jj => int.Parse(jj)).Sum()).ToArray();
            /*有一表内容大致如下:
            人员姓名 | 金额
            甲;乙;丁; | 60
            甲;乙; | 40
            乙;丁; | 40
            丙; | 20
            求一查询,平均分金额后合计,可得新表如下:
            人员姓名 | 金额
            甲 | 40
            乙 | 60
            丙 | 20
            丁 | 40
            即原表中第一行甲乙丙三人平分60,乙得20;第二行甲乙二人平分40,乙得20;第三行同理,新表中乙合计得60。*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: