小编Tes*_*rex的帖子

.NET字典如何解决冲突?

我有一个需要键入表的自定义对象的问题.我需要生成一个唯一的数字键.我有碰撞问题,我想知道我是否可以利用字典来帮助我.假设我有一个这样的对象:

class Thingy
{
    public string Foo;
    public string Bar;
    public string Others;
}
Run Code Online (Sandbox Code Playgroud)

等等有更多领域.让我们说Foo和Bar是我的关键字段 - 如果它们在两个Thingys之间相等,那么这两个对象应该被认为是相等的(一个可能代表对另一个的更新,其他字段正在更新.)所以我有这些:

public override bool Equals(object obj)
{
    Thingy thing = (Thingy)obj; // yes I do type check first
    return (this.Foo == thing.Foo && this.Bar == thing.Bar);
}

public override int GetHashCode()
{
    return (this.Foo + this.Bar).GetHashCode(); // using default string impl
}
Run Code Online (Sandbox Code Playgroud)

所以这在很大程度上是有效的,但是在极少数情况下,两个实际上不同的Thing具有相同的哈希码.

我的问题是:我可以使用词典<Thingy, int>我放在我的Thingys中,并使用字典中的顺序值作为我的实际键吗?我想知道,当检测到罕见的哈希代码冲突时,字典是否会调用我的Equals方法,确定对象实际上是不同的,并以不同方式存储它们.我在查找时进行成像,它会看到该哈希的桶并搜索正确的Thingy,再次使用Equals进行比较.

这是字典的情况,还是仅解决哈希码不同的冲突,但(哈希值大小)是否相同?如果这不起作用,可能会怎样?

.net c# dictionary hashcode hash-collision

15
推荐指数
2
解决办法
3404
查看次数

Javascript对象定义技术,优缺点

在Javascript中定义可重用对象的基本方法是什么?我说可重用以排除单例技术,例如直接用对象文字表示法声明变量.我在某处看到克罗克福德在他的书中定义了四种这样的方法,但我宁愿不用为这一小段信息买一本书.

以下是我熟悉的方法:

javascript coding-style object

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

.NET设计指南建议在IEnumerable <T>上返回List <T>吗?

上下文:我发送了一封电子邮件给我的同事,告诉他们Enumerable.Empty<T>()这是一种返回空集合的方法,而不是像return new List<T>();我得到的回复一样,说明其缺点是它没有暴露特定的类型:

这确实是一个小问题.尽可能具体地了解您的返回类型*(因此,如果您要返回List <>,请将其作为返回类型); 这是因为像Lists和Arrays这样的东西有额外的方法是有用的.此外,在使用调用方法的集合时,它还可用于进行性能考虑.

不幸的是,下面的技巧迫使你返回一个IEnumerable,它尽可能不具体,对吧?:(

*这实际上来自.NET设计指南.我相信,准则中陈述的理由与我在这里提到的相同.

这似乎与我所学到的完全相反,并尽可能地尝试,我在设计指南中找不到这个确切的建议.我找到了一个像这样的小件:

DO返回的子类Collection<T>或者ReadOnlyConnection<T>从很常用的方法和属性.

随着代码片段的跟随,但根本没有理由.


所以说,这是一个真实的,可接受的指导方针(在第一个块引用中描述的方式)?还是被误解了?我能找到的所有其他SO问题都有更好的答案IEnumerable<T>作为返回类型.也许最初的.NET指南刚刚过时了?

或者它可能不是那么清楚?是否需要考虑一些权衡因素?何时返回更具体的类型是个好主意?难道曾经建议退回到一个具体的泛型类型,或只返回一个更具体的接口喜欢IList<T>ReadOnlyCollection<T>

.net collections

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

块布局算法

我正在寻找帮助改进放置奇怪形状块的算法.我的问题领域是奇怪的,但我的块的最佳类比是俄罗斯方块,除了它们可以有超过四件.块仍然只是由直角组成,但它们可以很长而且缠绕,它们可以分支等.

我试图在最小的空间内安排多个大型任意形状的块(我知道,bin-packing问题),但我目前的解决方案看起来很难看.我基本上放置一个,然后通过试图将它们放置在我的网格的原点然后慢慢地将它们推向不同的方向,直到它们不再发生碰撞来强制其余部分.它并不慢,但它没有任何尝试很好地适应它们,所以它们不会浪费整体空间.

我唯一能想到的就是按尺寸排序块,先放置最大的块,然后将最小的块放入最后的剩余孔中.但肯定有些方法会适得其反.

是否有任何启发式或近似算法可以帮助我?

结果将如下所示:

在此输入图像描述

此外,也许我的gravatar放弃了这是Mega Man相关的......

algorithm bin-packing

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

核心数据无法找到源存储的模型 - 我的旧商店看起来像什么?

首先,这个问题对于实现核心数据版本控制的正确轨道有很大帮助.所以我为我的模型添加了一个新版本,现在我正在尝试让自动迁移工作,但我遇到了问题.我不记得我的旧版本是什么样的!我正在尝试在手机上运行应用程序,但我一直在使用模拟器并对架构进行了一些更改.手机上的版本是很久以前的.所以每次我尝试将旧版本修改为我认为在手机上的内容,但我仍然得到"找不到源代码存储模型"的错误.我猜它是因为我得到了旧架构错误.

有什么方法让我弄清楚手机上的架构是什么样的?除此之外,我怎么能从手机上擦除sqlite商店以便从版本1重新开始呢?

versioning iphone core-data

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

如何使用SSIS包将MS Access数据导入SQL Server?

我花了一天的时间来寻找任何可以帮助我的东西,但这SSIS是一个巨大的工具,到目前为止没有任何用处,或者我可能只是不理解它.

我需要一个旧的Access数据库,它有一些问题,并将其移动到SQL服务器.我已经在我的SQL数据库中设置了架构.需要修复旧数据,例如规范化和删除重复项.我的老板坚持使用SSIS这项工作,因为我们需要一个知道如何使用它的人,而且目前几乎没有人这样做(一位经理很久以前就使用过它).

所以,我在BDIS或视觉工作室中设置了一个项目,或者这个应用实际上是什么.我创建了一个连接管理器到我的Access数据库,我设法将OLE DB源拖到设计器上并将其设置为连接到该数据库.我还发现我可以从那里选择数据.

怎么办?我真的更喜欢有一种方法来编写一个巨大的SQL脚本来从Access数据库获取我需要的所有数据,将其转换为我想要的,并将其推送到SQL服务器数据库中.但看起来我需要在设计器中使用所有这些时髦的转换工具.我也无法弄清楚如何将结果数据导入SQL服务器.我在服务器资源管理器窗格中设置了连接,但在线的每个人都说从不使用SQL Server目标.所以我也迷失了.

我的老板说Books Online帮助文件非常有用.到目前为止,它就像在大海淹没的大海捞针中找到一根针,其上有三座城堡.信息太多了,对我来说似乎没什么用.

编辑

希望更多的信息将是有用的.我认为随附的向导SSIS对我想要的东西来说不够强大,所以如果它们是,你必须请解释它.这是我必须要做的一个例子,除了我的现实是有更多变换的表.

假设我有一个如下所示的源表:

Companies
====================================================
| Name    | Address    | WidgetOne   | WidgetTwo   |
|--------------------------------------------------|
| ACME    | 123 etc.   | Trampoline  | Cannon      |
====================================================
Run Code Online (Sandbox Code Playgroud)

我需要将其标准化为两个表.显然,它必须跟踪ID,以便小部件与正确的公司相关联.如果你可以帮助一个如何处理这种情况的例子SSIS,从Access到SQL服务器,那么我可以从那里采取它.谢谢!

ssis

10
推荐指数
1
解决办法
5万
查看次数

使用SQL Server Compact和Entity Framework的连接字符串?

我已经为此尝试了谷歌.我已经安装了SQL Server CE 4.0,并且有EF 4.1,但我无法获得正确的连接字符串.什么都不connectionstrings.com适用于我.

我只想创建一个SqlCeEngine对象,但无论我尝试什么,我都会遇到一些异常.最近一直是

连接字符串中的未知连接选项

使用"元数据","应用程序","提供程序"或"提供程序连接字符串"之后.我知道EF需要连接字符串中的元数据.我无法想象如果没有"提供者连接字符串",任何事情都可以做到.

到目前为止我有这个:

<add name="DBContext" 
     connectionString="provider connection string=&quot;Data Source=MyDbFile.sdf;Persist Security Info=False;&quot;" 
     providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

有一次,我用元数据:

<add name="DBContext" 
     connectionString="metadata=res://*/Data.DBContext.csdl|res://*/Data.DBContext.ssdl|res://*/Data.DBContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyDbFile.sdf;Persist Security Info=False;&quot;" 
     providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

它是否需要元数据?什么在连接字符串的"app"部分?提供者应该是什么,System.Data.SqlClient或者某些SQL Server CE版本?(当我尝试添加引用时,我仍然找不到.我的添加引用窗口仍然只包含System.Data.SqlServerCe版本3.5.1.0.)或者什么都没有?

providerName属性应该包含哪些内容?是对的System.Data.EntityClient吗?这就像这里有10个不同的变量,每个组合都给我一个新的同样神秘的错误,其中没有一个在Google上有用.我的智慧结束了.这甚至可能吗?

sql-server-ce entity-framework-4

10
推荐指数
3
解决办法
2万
查看次数

是否存在"负面"大O复杂性这样的事情?

可能重复:
是否有任何O(1/n)算法?

这只是因为没有特别的原因突然出现在我脑海中,我想这是一个奇怪的问题.是否有任何已知的算法或问题实际上通过更大的输入更容易更快地解决?我猜测,如果有,那就不会出现像突变或排序这样的事情,那就是决策问题.也许有一些问题,有大量的输入可以很容易地决定一些东西,但我无法想象.

如果没有负面复杂性这样的东西,是否有证据证明不存在?或者只是没有人找到它?

algorithm complexity-theory big-o

8
推荐指数
2
解决办法
7350
查看次数

WinRT图像处理

我和我的一个朋友在昨晚的大部分时间里花了很多时间试图在地铁应用程序中使用一些图像.我们在共享魅力的应用程序中获得了图像,然后我想与他们做一些其他的工作,裁剪图像并将它们保存回appdata文件夹.这被证明非常令人沮丧.

我的问题,在所有这一切的最后,将是"这样做的正确方法是什么,而不是觉得我正在拼凑一堆不匹配的拼图游戏?"

当与应用程序共享多个图像时,它们作为Windows.Storage.StorageFiles 列表进入.这是用于处理它的一些代码.

var storageItems = await _shareOperation.Data.GetStorageItemsAsync();

foreach (StorageFile item in storageItems)
{
    var stream = await item.OpenReadAsync();
    var properties = await item.Properties.GetImagePropertiesAsync();

    var image = new WriteableBitmap((Int32)properties.Width, (Int32)properties.Height);
    image.SetSource(stream);

    images.Add(image);
}
Run Code Online (Sandbox Code Playgroud)

一些在线搜索表明,目前,Windows.UI.Xaml.Media.Imaging.WriteableBitmap只有a 才能让你访问图像中的像素数据.这个问题包含一个有用的答案,其中包含将图像保存到文件的扩展方法,因此我们使用了这些方法.

当我稍后再次尝试打开文件时,我们的问题最严重.我做过类似的事情:

var files = await ApplicationData.Current.LocalFolder.GetFilesAsync();

foreach (var file in files)
{
    var fileStream = await file.OpenReadAsync();
    var properties = await file.Properties.GetImagePropertiesAsync();
    var bitmap = new WriteableBitmap((Int32)properties.Width, (Int32)properties.Height);
    bitmap.SetSource(fileStream);

    System.IO.Stream stream = bitmap.PixelBuffer.AsStream();
Run Code Online (Sandbox Code Playgroud)

这有一个问题.如果我想要字节数,这个流有多长?

    // CRASH! Length isn't …
Run Code Online (Sandbox Code Playgroud)

c# image windows-runtime windows-store-apps

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

为什么比图像图形更快地绘制OnPaint图形?

我正在寻找一种方法来加速我的游戏引擎的绘制,这是目前的重要瓶颈,并导致减速.我正处于将其转换为XNA的边缘,但我只是注意到了一些东西.

说我有一个我已加载的小图像.

    Image img = Image.FromFile("mypict.png");
Run Code Online (Sandbox Code Playgroud)

我们想要在屏幕上绘制一个图片框.所以我们有一个处理程序.

    pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);
Run Code Online (Sandbox Code Playgroud)

我希望我们加载的图像在图片框上平铺(毕竟这是一个游戏).为什么这个代码:

    void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        for (int y = 0; y < 16; y++)
            for (int x = 0; x < 16; x++)
                e.Graphics.DrawImage(image, x * 16, y * 16, 16, 16);
    }
Run Code Online (Sandbox Code Playgroud)

超过此代码的时间超过25倍:

    Image buff = new Bitmap(256, 256, PixelFormat.Format32bppPArgb); // actually a form member
    void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        using (Graphics g = Graphics.FromImage(buff))
        {
            for (int y = 0; y < 16; y++) …
Run Code Online (Sandbox Code Playgroud)

c# performance drawing gdi+

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