在MSDN文档站点上,它说明了以下有关该Array.Resize
方法的信息:
如果newSize大于旧数组的Length,则分配一个新数组,并将所有元素从旧数组复制到新数组.
如果newSize小于旧数组的长度,则分配一个新数组,并将元素从旧数组复制到新数组,直到填充新数组为止.旧数组中的其余元素将被忽略.
数组是一系列相邻的存储块.如果我们需要一个更大的阵列,我理解我们不能为它添加内存,因为它旁边的内存可能已经被其他一些数据声明了.所以我们必须要求一个具有所需更大尺寸的新的相邻内存块序列,复制我们的条目并删除我们对旧空间的主张.
但为什么要创建一个更小尺寸的新阵列?为什么数组不仅可以删除它对最后一个内存块的声明?然后它将是O(1)操作而不是O(n),就像现在一样.
它是否与数据在计算机体系结构或物理层面的组织方式有关?
列表说我有一个清单 List<int> {1,2,3,4,5}
旋转意味着:
=> {2,3,4,5,1} => {3,4,5,1,2} => {4,5,1,2,3}
Run Code Online (Sandbox Code Playgroud)
也许旋转不是最好的词,但希望你明白我的意思
我的问题,最简单的方法(简短的代码,c#4 Linq准备好),并且不会受到性能的影响(合理的性能)
谢谢.
我有一个xml文件,我正在使用lxml中的etree来处理,但是当我向它添加标签时,漂亮的打印似乎不起作用.
>>> from lxml import etree
>>> root = etree.parse('file.xml').getroot()
>>> print etree.tostring(root, pretty_print = True)
<root>
<x>
<y>test1</y>
</x>
</root>
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但现在
>>> x = root.find('x')
>>> z = etree.SubElement(x, 'z')
>>> etree.SubElement(z, 'z1').attrib['value'] = 'val1'
>>> print etree.tostring(root, pretty_print = True)
<root>
<x>
<y>test1</y>
<z><z1 value="val1"/></z></x>
</root>
Run Code Online (Sandbox Code Playgroud)
它不再漂亮了.我还试图"向后"创建z1标签,然后创建z标签并将z1附加到它,然后将z标签附加到x标签.但我得到了相同的结果.
如果我不解析文件并只是一次创建所有标签,它将正确打印.所以我认为它与解析文件有关.
如何让漂亮的印刷工作?
我有一个对象列表,我想循环遍历该列表并启动一个新线程,传入当前对象.
我写了一个我认为应该做的事情的例子,但它不起作用.具体来说,似乎线程在每次迭代时都会被覆盖.这对我来说真的没有意义,因为我每次都在创建一个新的Thread对象.
这是我写的测试代码
class Program
{
static void Main(string[] args)
{
TestClass t = new TestClass();
t.ThreadingMethod();
}
}
class TestClass
{
public void ThreadingMethod()
{
var myList = new List<MyClass> { new MyClass("test1"), new MyClass("test2") };
foreach(MyClass myObj in myList)
{
Thread myThread = new Thread(() => this.MyMethod(myObj));
myThread.Start();
}
}
public void MyMethod(MyClass myObj) { Console.WriteLine(myObj.prop1); }
}
class MyClass
{
public string prop1 { get; set; }
public MyClass(string input) { this.prop1 = input; }
}
Run Code Online (Sandbox Code Playgroud)
我机器上的输出是 …
到目前为止,我能够使用Visual Studio 2012中的Schema Compare功能从数据库项目更新数据库.但是现在,对于一个项目,我可以进行比较,但更新按钮是灰色的.
我能够使用其他项目来更新其他数据库,但是从这个项目我无法更新任何数据库.我没有收到任何错误,功能只是不可用.
使用发布仍然有效.同样从数据库更新项目也起作用,而不是相反.
有谁知道为什么我无法通过Schema Compare更新数据库?
我正在尝试从C#应用程序对数据库存储过程进行简单调用.
这两者都具有相同的基本步骤.
但第3步不起作用.我有我的存储过程和设计器窗口,但我无法拖动sproc.我没有加号或"不允许"的标志.它只是一个不可拖动的对象.
我找不到另一种方法将我的sproc添加到.dbml文件中.我找不到有这个问题的其他人.每个消息来源都只是说要拖过来.
我在这里做错了什么?
截图:
为了简洁起见,在我的代码中,我希望能够执行以下操作:拥有一个集合,找到匹配lambda表达式的第一个元素; 如果存在,则返回属性或函数的值.如果它不存在,则返回null.
更新的例子w.类
我们有一些东西
class Stuff
{
public int Id { get; set; }
public string Value { get; set; }
public DateTime? ExecutionTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的目标是在调用它时很好地返回
var list = new Stuff[] { new Stuff() { Id = 1, Value = "label", ExecutionTime = DateTime.Now } };
// would return the value of ExecutionTime for the element in the list
var ExistingTime = list.FirstOrDefault(s => s.Value.Contains("ab")).ExecutionTime;
// would return null
var NotExistingTime = list.FirstOrDefault(s => s.Value.Contains("zzz")).ExecutionTime;
Run Code Online (Sandbox Code Playgroud)
是否可以使用一些linq-syntax-fu或者我必须在继续之前明确检查返回值? …
我无法使用Process.Kill()
.我想我一定是在误解它是如何运作的.这是我的测试功能.我开始一个长时间运行的进程(ping -t
),然后在五秒后终止它.
我可以看到ping进程显示,但程序结束后进程仍然存在.我必须手动杀死它.
Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);
ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe");
Process process = new Process();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = "/c ping -t 8.8.8.8";
Console.WriteLine("Staring ping process");
process.StartInfo = startInfo;
process.Start();
Thread.Sleep(5000);
Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);
Thread.Sleep(5000);
Console.WriteLine("Killing ping process");
process.Kill();
Thread.Sleep(5000);
Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
以下内容无法编译。
public class A
{
private readonly int i;
public A()
{
void SetI()
{
i = 10;
}
SetI();
}
}
Run Code Online (Sandbox Code Playgroud)
失败并显示以下错误:
CS0191不能将只读字段分配给它(在构造函数或变量初始化程序中除外)
从技术上讲,由于局部函数的可见性受到限制,我们仍然不在构造函数中,所以我想知道为什么它不能编译。
我想我确实理解monad列表然后我发现我不是.这是故事.
给出列表m
和功能k
> let m = [1..10]
> :t m
m :: [Integer]
> let k = replicate 2
> :t k
k :: a -> [a]
Run Code Online (Sandbox Code Playgroud)
玩bind >>=
会给我的期望
> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
> :t m >>= k
m >>= k :: [Integer]
> m >>= k
[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10]
Run Code Online (Sandbox Code Playgroud)
但对于 >>
预期(从IO monad体验,左侧的所有内容都将被丢弃)
m >> m
[1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
拿到
> :t (>>) …
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×2
arrays ×2
linq ×2
list ×2
sql-server ×2
constructor ×1
foreach ×1
haskell ×1
kill ×1
linq-to-sql ×1
lxml ×1
monads ×1
parsing ×1
pretty-print ×1
process ×1
python ×1
readonly ×1
syntax ×1
xml ×1