求一多对多的 可扩展算法

kaishiyouxi 2010-04-07 09:55:39
颜色属性有 红黄蓝三个元素,尺寸有大中小三个元素,形状有方圆三角 三个元素,怎样多对多的循环遍历出来 最重要的是 可扩展性 属性 会继续添加 望高搜赐教
...全文
236 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
chao272724792 2010-04-08
  • 打赏
  • 举报
回复
接分,lz加油!!!!!!!!!
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
http://www.cnblogs.com/ghx88/archive/2007/01/29/633655.html

这是 我在 博客园 找到的 我想这就是我想要的思路了 呵呵 谢谢大家 的关注支持 散分了 尤其
感谢
foren_whb

(丰云)
给我指明了方向~
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 foren_whb 的回复:]
如果元数据都在数据库表里面,
就更简单拉,
直接用笛卡尔乘积得到你想要的结果,
而且不用考虑数据增加的情况。
[/Quote]

恩 。。学习了个词 笛卡尔乘积 百度了下 确实 是我想要的东西。但是怎么得出这个 笛卡尔乘积呢
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
表 property 列 id name 用来存 颜色 大小 等 任何 属性值 属性多少不限定 可随时修改添加
表 p_value 列 id name p_id 跟 property 关联 用来 存储 颜色等属性值的元素 比如颜色的红黄绿 等 元素值多少不限定 可随时修改 添加

想要的结果 就是5楼 那样 的循环遍历出来 当然顺序 不必 一样
丰云 2010-04-07
  • 打赏
  • 举报
回复
如果元数据都在数据库表里面,
就更简单拉,
直接用笛卡尔乘积得到你想要的结果,
而且不用考虑数据增加的情况。
丰云 2010-04-07
  • 打赏
  • 举报
回复
如果有时间,
给你写个c语言的递归指针遍历算法。

你把需求说详细点,
元数据是什么样的,
那些是动态增加的,
想得到的数据是怎样的等等。
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
急 啊。。。大虾们帮忙想想招啊。什么算法都行 只要实现 就行
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 foren_whb 的回复:]
引用 9 楼 kaishiyouxi 的回复:
如题 可扩展 我再添加 100个属性呢 不能 再改程序 添加100个FOR循环吧

如果想遍历,只有这样,没有更简洁的方法!!
除非改你的设计!
[/Quote]

什么都可以改 因为属性多少是变化的 不是 固定值 还有你说的递归,,望赐教 我现在对这个问题还是没思路 刚才你给的 算法 应该 也是不能很好的解决 问题
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 foren_whb 的回复:]
类似下面??

string[] color = {"红","黄","蓝"};
string[] size = {"大","中","小"};
string[] type = {"1","2","3"};
string[] result= new string[color.count()*size.count()*type.count()];
int i = 0;
foreach(va……
[/Quote]
我反应 比较慢 不过你 这个 有点 意思 对我这个问题 我想下
丰云 2010-04-07
  • 打赏
  • 举报
回复
可以写成递归,有几个属性,就递归几次
丰云 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kaishiyouxi 的回复:]
如题 可扩展 我再添加 100个属性呢 不能 再改程序 添加100个FOR循环吧
[/Quote]
如果想遍历,只有这样,没有更简洁的方法!!
除非改你的设计!
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wzp144650 的回复:]
引用 6 楼 kaishiyouxi 的回复:

这是 当 颜色 有 红黄蓝绿 尺寸 有大中小 新旧 有 一二三成新 的时候循环遍历的结果


那你说的属性增加是什么意思?

你是说会出现一个新属性? 是和颜色 尺寸 新旧 同级别的?
[/Quote]

恩 是同级别 比如 我还可以添加一个 同级别的 形状属性 有 圆形三角等元素
丰云 2010-04-07
  • 打赏
  • 举报
回复
类似下面??

string[] color = {"红","黄","蓝"};
string[] size = {"大","中","小"};
string[] type = {"1","2","3"};
string[] result= new string[color.count()*size.count()*type.count()];
int i = 0;
foreach(var t1 in color)
{
foreach(var t2 in size )
{
foreach(var t3 in type )
{
result[i++] = t1 + t2 + t3;
.......
}
}
}
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wzp144650 的回复:]
C# code

namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
AA A= new AA() { MyProperty = 1, SSS = "dd", jj = 23 };
……
[/Quote]

这个算法不能解决我的这个问题 不过还是谢谢了
wzp144650 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kaishiyouxi 的回复:]

这是 当 颜色 有 红黄蓝绿 尺寸 有大中小 新旧 有 一二三成新 的时候循环遍历的结果
[/Quote]

那你说的属性增加是什么意思?

你是说会出现一个新属性? 是和颜色 尺寸 新旧 同级别的?
porschev 2010-04-07
  • 打赏
  • 举报
回复
这种多组合。。。我也只能想到循环。。。。

不过多了循环效率是低。。先占个楼吧。。。
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
如题 可扩展 我再添加 100个属性呢 不能 再改程序 添加100个FOR循环吧
wzp144650 2010-04-07
  • 打赏
  • 举报
回复

namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
AA A= new AA() { MyProperty = 1, SSS = "dd", jj = 23 };
PropertyInfo[] pInfos =A.GetType().GetProperties();
foreach (var item in pInfos)
{
Console.WriteLine(item.Name);

}
Console.Read();
}
}
class AA
{
public int MyProperty { get; set; }
public string SSS { get; set; }
public int jj { get; set; }
}
}
丰云 2010-04-07
  • 打赏
  • 举报
回复
就是三重for循环,
有什么问题呢?
kaishiyouxi 2010-04-07
  • 打赏
  • 举报
回复
这是 当 颜色 有 红黄蓝绿 尺寸 有大中小 新旧 有 一二三成新 的时候循环遍历的结果
加载更多回复(5)

62,046

社区成员

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

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

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

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