数组判断问题

wx8849 2011-06-28 04:04:12
我现在有这样的几个数组
2011061330301,2011061330301,2011061324084,
Sennheiser PXC 450,Sennheiser PX 100-II Black,Sennheiser PX 100-II Black,
12,16,16,
声海商城专库,声海商城专库,声海商城专库,
1,1,1,

我想根据12,16,16这个数组改成
2011061330301,2011061330301+2011061324084,
Sennheiser PXC 450,Sennheiser PX 100-II Black
12,16,
声海商城专库,声海商城专库
1,2,
这样的方式应该怎么搞
...全文
275 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingdom_0 2011-06-30
  • 打赏
  • 举报
回复
简单的Distinct
wx8849 2011-06-29
  • 打赏
  • 举报
回复
因为数据都是从几个数据库读出来拼接的
wx8849 2011-06-29
  • 打赏
  • 举报
回复
我自己加了
wx8849 2011-06-29
  • 打赏
  • 举报
回复
谢谢 老毕了
老毕 2011-06-29
  • 打赏
  • 举报
回复
第31行那个foreach循环里的Console.Writeline()的第2个参数,我忘记加上_name了。应该这样:
group.Where(o => o._id == group.Key).FirstOrDefault()._name,

楼主整个数据结构的选择,实在有点怪异了。词不当的,还请见谅。用多个数组分开存储本来是一个实体的各种属性,实在不方便。
即便是要为DropList这样的控件提供数据源,也可以用对象的数组来提取值的。
kennyzxi 2011-06-29
  • 打赏
  • 举报
回复
没看懂题目
老毕 2011-06-28
  • 打赏
  • 举报
回复
如果你只是要个类似出货记录的功能,完整模拟代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;

namespace CSDNReply
{
class Program
{
static void Main()
{
int[] ids = new int[] { 12, 16, 16 };
string[] serials = new string[] { "2011061330301", "2011061330301", "2011061324084" };
string[] names = new string[] { "Sennheiser PXC 450", "Sennheiser PX 100-II Black", "Sennheiser PX 100-II Black" };
int[] shippings = new int[] { 1, 1, 1 };

// 将上述一一对应的数组合并成一张Product的表
List<Product> products = new List<Product>();
for (int i = 0; i < ids.Length; i++)
products.Add(new Product(ids[i], serials[i], names[i], shippings[i]));

// 根据产品型号分组
var result = products.GroupBy(p => p._id);

foreach (var group in result)
{
Console.WriteLine("产品编号[{0}]:<{1}>已出货:{2}件,明细如下:",
group.Key,
group.Where(o => o._id == group.Key).FirstOrDefault(),
group.Sum(o => o._shipping));

Console.WriteLine("".PadLeft(40, '-'));

foreach (Product item in group)
Console.WriteLine("\t产品批号<{0}>-出货{1}件", item._serial, item._shipping);

Console.WriteLine();
}
}
}

class Product
{
public int _id = -1;
public string _serial = string.Empty;
public string _name = string.Empty;
public int _shipping = -1;

public Product(int id, string serial, string name, int shipping)
{
this._id = id;
this._serial = serial;
this._name = name;
this._shipping = shipping;
}
}
}

结果:
产品编号[12]:<CSDNReply.Product>已出货:1件,明细如下:
----------------------------------------
产品批号<2011061330301>-出货1件

产品编号[16]:<CSDNReply.Product>已出货:2件,明细如下:
----------------------------------------
产品批号<2011061330301>-出货1件
产品批号<2011061324084>-出货1件
老毕 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wx8849 的回复:]
只要能找到12,16,16,这里面重复的,可以根据这个的索引找到其它数组的值
[/Quote]
就是这个的后半句让我很头疼。
老毕 2011-06-28
  • 打赏
  • 举报
回复
把某一个数组里的某元素删除了,这几个数组最后就没办法依靠索引一一对应了。老实说,你这数据结构用得有点让我头疼了。
从你的表述看,产品名称和产品代号是一一对应的固定关系,但同一产品的批号和出货量是不一定的。如果是用这几个数组打一张出货单,倒也不难,难的是按你的要求把数组里的元素给处理了,还要想办法保证原来的对应关系。

对此,个人认为通过建立关系模型来解决是比较合适的。
建立一张产品登记表Products:<产品批号>,<产品代号>,<产品名称>
建立一张产品出货表Shippings:<产品批号>,<出货量>
两张表利用<产品批号>建立一个1对多的关系,这样可以充分地利用LINQ进行分类汇总。

下面这段是我之前准备模拟你的要求的,写了一半,再写不下去了,哈哈。因为到LINQ那里,才想起这东西会让你同一类产品不同批号的出货量都是出货的总和数。想要剔除其中一项,你又要求保留所有的批号。所以暂时就这样吧。先吃饭去了。晚上有时间,再按照上面我建议的思路,给你补上一段模拟的代码。
int[] ids = new int[]
{
12,
16,
16
};

string[] serials = new string[]
{
"2011061330301",
"2011061330301",
"2011061324084"
};

string[] names = new string[]
{
"Sennheiser PXC 450",
"Sennheiser PX 100-II Black",
"Sennheiser PX 100-II Black"
};

int[] shippings = new int[]
{
1,
1,
1
};

// 将上述一一对应的数组合并成一张Product的表
List<Product> products = new List<Product>();
for (int i = 0; i < ids.Length; i++)
products.Add(new Product(ids[i], serials[i], names[i], shippings[i]));

var result = products.GroupBy(p => p._id).SelectMany
(g => g.Select(r => new
{
id = g.Key,
serial = r._serial,
name = r._name,
shipping = g.Count()
}));
wx8849 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 abbey 的回复:]
批号留哪个?
[/Quote]
重复的2个都要留
老毕 2011-06-28
  • 打赏
  • 举报
回复
批号留哪个?
wx8849 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 abbey 的回复:]
多好的一个Product的实体类,你给硬生生拆成了4个数组,真残忍啊。

不同批号的字符串要拼在一起还是怎么?
[/Quote]

你写吧,写了我看看
wx8849 2011-06-28
  • 打赏
  • 举报
回复
前提是产品ID要相等的相加,出库数量也是相加,其他都删除
老毕 2011-06-28
  • 打赏
  • 举报
回复
多好的一个Product的实体类,你给硬生生拆成了4个数组,真残忍啊。

不同批号的字符串要拼在一起还是怎么?
wx8849 2011-06-28
  • 打赏
  • 举报
回复
用表的话我其它改动会很大
wx8849 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 abbey 的回复:]
正在写,等等,要模拟你的这几个表,有点长
[/Quote]

不需要用表,直接数组就好了,因为表的结构不是你说的那样
老毕 2011-06-28
  • 打赏
  • 举报
回复
正在写,等等,要模拟你的这几个表,有点长
wx8849 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 wxr0323 的回复:]
相同的去重

不相同的累加 是不是这个功能

LINQ 实现起来比较简单。
[/Quote]
不会写linq 子夜帮忙啊
wx8849 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 wxr0323 的回复:]
相同的去重

不相同的累加 是不是这个功能

LINQ 实现起来比较简单。
[/Quote]
是有些去重,有些相加,几个数组的索引都是一一对应的
加载更多回复(23)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧