小编dee*_*392的帖子

锯齿状的动态深度词典?

我试图从一系列代表深度的字符串中提取:

'foo/bar/x'
'foo/bar/baz/x'
'foo/bar/baz/x'
'foo/bar/lol/x'
Run Code Online (Sandbox Code Playgroud)

x我不关心的数字在哪里.我已经完成了分裂/和循环,在PHP中,我会做一些事情,比如检查我在循环中的位置(使用for (i=0; etc)),然后使用它来确定我构建输出数组的深度,如:

output['foo']['bar'] = 1
output['foo']['bar']['baz'] = 2
output['foo']['bar']['lol'] = 1
Run Code Online (Sandbox Code Playgroud)

问题是"深度"是动态的,可能只是3/4深(我可以通过对价值的大量检查i和单独处理它来解释)或者说10或更深,在这种情况下某种类型的递归函数可能是最好的.

我遇到了一个问题,即将字符串作为数组索引我需要使用字典,但是你必须在字典中指定类型,这意味着你需要知道高级的深度(如果我是的话,请纠正我)在实例化字典对象时.

我猜一个攻击可能就像调用一个递归函数,每次调用它来传递i指示深度,然后函数调用自己i每次递减,直到它从该输入字符串构建树的一部分,但它是什么存储我在C#中使用的结构,我不确定.

最终输出将是一个CSV,我可以打开它作为电子表格,如下所示:

Foo        0
|__Bar     1
   |__Baz  2
   |__Lol  1
Run Code Online (Sandbox Code Playgroud)

也许对于溶液中的一种方向是使用纯C#阵列和简单地存储的标题(例如foo)在那里,保持了阵列indicies,这可能是最好的做法反正的信息.谢谢.

c# recursion jagged-arrays recursive-datastructures

2
推荐指数
1
解决办法
678
查看次数

DataTable添加列不添加行?

我需要对这个DataTable概念有点引导.我将数据存储在DataTable中,我首先添加一个列,如下所示:

DataTable outputData = new DataTable();
outputData.Columns.Add("Reference/Group");
Run Code Online (Sandbox Code Playgroud)

现在,如果我将其写入CSV文件(使用我自己的类),我会得到你所期望的,电子表格软件中的视图如:

             A
 1    Reference/Group
Run Code Online (Sandbox Code Playgroud)

然而,当我继续在我的脚本中假设存在第1行(通过引用outputData.Rows[0])时,我得到:

Exception: There is no row at position 0.
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试添加具有上述内容的行,则会抱怨没有列.如果我指定列然后添加一行,我可以参考,Rows[0]但到那时我有两行,如:

             A
 1    Reference/Group
 2    Some new row
Run Code Online (Sandbox Code Playgroud)

这里的正确方法是什么,这种行为的原因是什么?

c# datatable

2
推荐指数
1
解决办法
193
查看次数

使用子句中的C#Foreach值?

我正在尝试使用foreach控件循环遍历字符串数组,然后使用每个值在数据库中插入信息.有人可以帮我理解为什么在using子句中我不能使用foreach变量?

string[] ship_ids = ShipsInScope.Split('|');
foreach (string ship_id in ship_ids)
{
     using (SqlCommand InsertCommand = new SqlCommand("insert into PROJECT_SHIP (CR_Number, Ship_Id) VALUES (@CR_Number, @CCF_Number)", DBConn))
    {
         InsertCommand.Parameters.Add("@CR_Number", SqlDbType.NVarChar, 10).Value = CRNumber;
         InsertCommand.Parameters.Add("@Ship_Id", SqlDbType.NVarChar, 10).Value = Ship_Id;

         InsertCommand.ExecuteNonQuery();
         InsertCommand.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# visual-web-developer-2010

1
推荐指数
1
解决办法
585
查看次数

左连接后的SQL Server MERGE列?

我是SQL Server的新手,所以我希望你能提供帮助.

基本上我有两个信息表.第一个看起来像:

  • table1 [ ID, Name]
  • table2 [ FKID, ID, Name]

我想做一个如下声明:

SELECT table1.Name, table2.Name
FROM table1
LEFT JOIN table2 ON table2.FKID = table1.ID
Run Code Online (Sandbox Code Playgroud)

这导致类似于:

['Name 1a', 'Name 2a']
['Name 1b', NULL]
['Name 1c', NULL]
Run Code Online (Sandbox Code Playgroud)

但我想要的只是选择一列,Name 1x或者Name 2x是否为空(左连接没有键匹配).

我想,典型的响应是使用我的编程语言来解决这个问题,但是在使用GridViews的Visual Web Developer和所有这些废话中证明这是非常困难的,所以最有用的是数据库解决方案.

非常感谢!

sql-server asp.net visual-web-developer

1
推荐指数
1
解决办法
2133
查看次数

Perl需要显式的包名,但已在范围内定义(无严格工作)

我遇到的问题是,即使我已经在更高的范围内声明了我的变量,当我去使用它时,我被告知它需要显式的包名.代码如下:

my $stats = {
    privileges => (),
    missing_users => ()
};

LINE:
while (my $line = <$fh>)
{
    chomp($line);
    next if $line eq "";

    my $regex = "";
    my $type = "";

    while (($type, $regex) = each(%$entry_regex))
    {
        if ($line =~ /$regex/) {
            if ($type eq "EXCEPTION_PRIVS")
44:         {
45:             push(@{$stats{privileges}}, $1);
46:             next LINE;
            }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

全局符号"%stats"需要在Import Routine Log Pars er.pl第45行显式包名.

我没有收到此错误,并且脚本会根据需要运行,何时use strict;删除.

我认为,因为我已经在一个"更高"的范围内声明它应该可以访问循环中的代码.为什么我收到此错误?

perl scope

-1
推荐指数
1
解决办法
561
查看次数