高分 求一个算法

y63964632 2009-03-11 12:25:30
现有如下数据:
List<string> items = new List<string> ( )
{
"3","31","311","3117","add","delete","update","select","revert","312","3121","add","delete","update","select","revert","313","3131","revert","3132","add"
};
var id=17;

需要存储到数据库中:
数据结构: ID UserID PurviewID Opreate
结果: 1 17 3
2 17 31
3 17 311
4 17 3117 11111
5 17 312
6 17 3121 11111
7 17 313
8 17 3131 00001
9 17 3132 10000

有增,删,改,查,还原 5个选项对应:“add","delete","update","select”

对应的数据实体: var entity=new{ID=?,UserID=?,PurviewID=?,Opreate=?};

不知道这么说清楚么?
...全文
150 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxap 2009-03-11
  • 打赏
  • 举报
回复
没有看明白
zgke 2009-03-11
  • 打赏
  • 举报
回复
不知道在说什么呢
Teng_s2000 2009-03-11
  • 打赏
  • 举报
回复
唉,我是没有看明白!
zzxap 2009-03-11
  • 打赏
  • 举报
回复
帮顶
iGouzy 2009-03-11
  • 打赏
  • 举报
回复
控制台输出

0 17 3 00000
1 17 31 00000
2 17 311 00000
3 17 3117 11111
4 17 312 00000
5 17 3121 11111
6 17 313 00000
7 17 3131 00001
8 17 3132 10000
iGouzy 2009-03-11
  • 打赏
  • 举报
回复
试试看

class Program
{
static void Main(string[] args)
{
List<string> items = new List<string>(
new string[]{
"3","31","311","3117","add","delete","update","select","revert","312","3121","add","delete","update","select","revert","313","3131","revert","3132","add"
});
int id = 17;

//用于模拟你的数据库表结构
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("UserID", typeof(int)));
dt.Columns.Add(new DataColumn("PurviewID", typeof(string)));
dt.Columns.Add(new DataColumn("Opreate", typeof(string)));

//正文
Regex regex = new Regex(@"[0-9]+");
string[] last = null; //顺序:s, "add", "delete", "update", "select", "revert"
int i = default(int);
string s = null;

for (int j = 0; j <= items.Count; j++)
{
if (j < items.Count && (s = items[j]) != null && !regex.IsMatch(s))
{
if (s.Equals("add")) last[1] = "1";
else if (s.Equals("delete")) last[2] = "1";
else if (s.Equals("update")) last[3] = "1";
else if (s.Equals("select")) last[4] = "1";
else if (s.Equals("revert")) last[5] = "1";
}
else
{
if (last != null)
{
dt.Rows.Add(new object[] {
i++, //ID
id, //UserID
last[0], //PurviewID
string.Format("{0}{1}{2}{3}{4}", last[1], last[2], last[3], last[4], last[5]) //Opreate
}); //这里应该替换成插入数据库的语句
}

last = new string[] { s, "0", "0", "0", "0", "0" };
}
}

//打印调试信息
foreach (DataRow dr in dt.Rows)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
System.Console.Write(string.Format("{0}\t", dr[j]));
}

System.Console.WriteLine(string.Empty);
}

System.Console.ReadKey();
}
}
止戈而立 2009-03-11
  • 打赏
  • 举报
回复
在for循环后面应该加一句:
if(item==string.Empty) item=items[items.Count-1];

y63964632 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 min_jie 的回复:]
C# code
static void Test(List<string> items)
{
int flag = 0;
string item=string.Empty;
for (int i = 1; i < items.Count; i++)
{
if (flag == 0) item = items[i - 1];
switch (items[i])
{
case "add": flag += 10000; break;
case "delete": fla…
[/Quote]

谢谢 我试下 结贴~hoho
龙宜坡 2009-03-11
  • 打赏
  • 举报
回复
mark
止戈而立 2009-03-11
  • 打赏
  • 举报
回复

static void Test(List<string> items)
{
int flag = 0;
string item=string.Empty;
for (int i = 1; i < items.Count; i++)
{
if (flag == 0) item = items[i - 1];
switch (items[i])
{
case "add": flag += 10000; break;
case "delete": flag += 1000; break;
case "update": flag += 100; break;
case "select": flag += 10; break;
case "revert": flag += 1; break;
default:
//写入数据库的操作,item是PurviewID,flag是Opreate
Console.WriteLine(item + "," + (flag == 0 ? "" : flag.ToString("D5")));
flag = 0; item = string.Empty; break;
}
}
Console.WriteLine(item + "," + (flag == 0 ? "" : flag.ToString("D5")));
//将最后一项写入数据库,item是PurviewID,flag是Opreate
}
/*控制台输出:(仅输出PurviewID,Opreate)
3,
31,
311,
3117,11111
312,
3121,11111
313,
3131,00001
3132,10000
*/
止戈而立 2009-03-11
  • 打赏
  • 举报
回复
        void Test(List<string> items)
{
int flag = 0;
string item=string.Empty;
for (int i = 1; i < items.Count; i++)
{
if (flag == 0) item = items[i - 1];
switch (items[i])
{
case "add": flag += 1; break;
case "delete": flag += 10; break;
case "update": flag += 100; break;
case "select": flag += 1000; break;
case "revert": flag += 10000; break;
default:
//写入数据库的操作,item是PurviewID,flag是Opreate
flag = 0; item = string.Empty; break;
}
}
//将最后一项写入数据库,item是PurviewID,flag是Opreate
}
y63964632 2009-03-11
  • 打赏
  • 举报
回复
权限树中取到的值~~权限树的末节点中又加入了5个子节点 增删改查还原

然后进行写数据库~
y63964632 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Teng_s2000 的回复:]
唉,我是没有看明白!
[/Quote]
数据是从 treeView中取到的treenode的value

需要把数组中的数字类型的值 和ID 17放到 实体userID和purviewID中

数组中 "增删改查还原" 放到他前面那个purviewID后的Opreate字段中


"add" 对应10000
"add","delete" 对应11000
"add","delete","update" 11100
"add","delete","update","select" 11110
"add","delete","update","select","revert"对应 11111
"add","update","select","revert" 10111

也就是 5个值中有 则为 1 没有 用0补齐
Teng_s2000 2009-03-11
  • 打赏
  • 举报
回复
哈哈,我还以为我这语文没有及过格的每一看明白呢
原来大家都没看明白啊!
mjjzg 2009-03-11
  • 打赏
  • 举报
回复
这是要干嘛?
relive_qiankai 2009-03-11
  • 打赏
  • 举报
回复
先帮顶!

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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