我有一个对象,我想生成一个唯一的哈希(覆盖GetHashCode()),但我想避免溢出或不可预测的事情.
代码应该是组合一小组字符串的哈希码的结果.
哈希码将是生成缓存密钥的一部分,因此理想情况下它们应该是唯一的,但是被散列的可能值的数量很小所以我认为概率对我有利.
这样的事情是否足够并且有更好的方法吗?
int hash = 0;
foreach(string item in collection){
hash += (item.GetHashCode() / collection.Count)
}
return hash;
Run Code Online (Sandbox Code Playgroud)
编辑:感谢您的答案到目前为止.@Jon Skeet:不,订单并不重要
我想这几乎是另一个问题,但由于我使用结果生成缓存键(字符串)是否有意义使用像MD5这样的加密哈希函数或只使用此int的字符串表示?
有一个很好的文档称为"十二因素应用程序"(http://www.12factor.net/),其中作者试图定义设计,构建和部署现代应用程序的完美方式.服务.
该文档非常笼统,在许多情况下,所描述的实践并非最佳,不易实现或违反Microsoft的最佳实践.例如:文档不鼓励使用配置文件,而是使用环境变量进行配置.这在.NET中似乎是不正确的,其中使用XML配置文件是常见的(最好的?)实践.
在一个理想的世界中(即忘记预算/技术/技能限制),在一个组织中,Microsoft平台被选为所有部署和.NET/TFS的首选平台,选择开发环境/工具如何遵循指导在十二因素应用程序?
这样的应用程序是否有任何好的例子(也许是一个具有出色参考架构的开源应用程序)?
我将一堆项添加到具有特定前缀的ASP.NET缓存中.我希望能够遍历缓存并删除这些项目.
我尝试这样做的方式是这样的:
foreach (DictionaryEntry CachedItem in Cache)
{
string CacheKey = CachedItem.Key.ToString();
if(CacheKey.StartsWith(CACHE_PREFIX){
Cache.Remove(CacheKey);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以更有效地做这件事吗?
我曾考虑创建一个临时文件并添加对文件具有依赖性的项目,然后只删除该文件.这是杀了吗?
我想为我工作的一些常见Java项目开发一些项目模板.
基本上,我想在标准的New Java Project Wizard上的额外Window中捕获一些信息,然后在一堆模板文件上做一些文本替换并将它们添加到项目中.
关于如何做到这一点的教程,我一直在寻找高低,但看起来你需要真正了解Eclipse插件开发的各种方法才能获得.
任何人都可以指向我在Eclipse中自定义新项目向导的教程的方向或类似的项目,所以我可以查看源代码?
我们有一个专有的硬件,我们希望将其作为手机外设发布.
我们已经开始编写一个跨平台的移动应用程序,它使用MonoCross框架与硬件连接(即用于iOS的MonoTouch抽象层和用于Android的MonoDroid抽象).
我们希望将此应用程序的大部分内容作为代码库提供,可供其他希望编写与我们的硬件接口的应用程序的应用程序开发人员重用.
我担心通过使用Mono,我们迫使这些开发人员也这样做.是这样的吗?
Android库
我们可以生成一个Android库(不是我理解为提供全源的库项目)作为MonoDroid的输出,其他开发人员使用ADT和Java开发(即他们没有使用Mono Droid)能够使用他们的应用?
iOS库
我们可以从MonoTouch生成一个库,Objective C开发人员(即他们没有使用Mono Touch)能够在他们的应用程序中使用吗?
我有一个项目,使用泛型和一些Java 1.5/6位碎片.是否可以编译此代码以在运行1.4 JRE的系统上运行?
我使用ANT构建脚本和javac任务来编译库.这个构建正常,而目标属性是1.5.
如果我将目标更改为1.4,则会出现以下错误:
generics are not supported in -source 1.4
(use -source 5 or higher to enable generics)
Run Code Online (Sandbox Code Playgroud)
所以我添加了一个source属性,并尝试使用值5和1.5.新错误:
javac: source release 5 requires target release 1.5
Run Code Online (Sandbox Code Playgroud)
我是否必须完成所有代码并更改1.5内容以使其工作?
我正在尝试实现一个强大的TCP库,它允许用户选择一个应用程序协议或实现他们自己的,并简单地"插入"到客户端/服务器.
通过协议,我的意思是简单地定义如何将流构造成消息的能力.
我正在为堆栈的其余部分使用内置的异步TCP库,并开发了一个客户端,无论何时建立连接,读取或写入数据或引发异常,都会引发事件.
我有两种实现成帧协议的选择.第一个已经工作的是扩展客户端类并覆盖接收的数据事件,这样只有在收到完整消息时才会引发此事件.(即在引擎盖下,我缓冲来自套接字的原始数据,并根据协议决定何时有完整的消息,然后才提出数据接收事件.)这类似于Nito.Asynch库的工作方式.
这种方法的问题在于它意味着每个新协议都需要新的客户端实现.我更喜欢客户端维护可以添加或删除的内部过滤器堆栈.
当在套接字上接收到数据时,它将被传递到第一个缓冲区,该缓冲区将一直缓冲,直到它决定传递删除了头或元数据的完整消息.然后将其传递给堆栈等中的下一个过滤器等.
这样,可以独立于库定义/开发过滤器,并根据配置(在运行时)将过程注入到客户端.
为了实现这一点,我考虑将过滤器定义为由客户端内部保存的System.IO.Stream(传入和传出)的实现对.
从套接字读取的数据将写入堆栈的底部传入流.然后,从该流读取的数据将被写入下一个流等,直到最后一个流(堆栈顶部)返回数据,然后由客户端返回.(我的计划是使用Stream的CopyTo()函数).
写入客户端的数据将写入顶部传出流并向下复制到堆栈,直到底部传出Stream写入底层套接字.
显然有很多事情需要考虑,我试图让我的头脑以正确的方式表现为Stream对象.示例:当有人调用Flush()时,我该怎么办?
这是实现这一目标的好方法还是我在这里重新发明轮子?
Nito.Asynch库
我正在尝试用C#完成一些我在Java中轻松完成的工作.但有点麻烦.我有一个未定义数量的T类型的对象数组.A实现了一个接口I.我需要一个I的数组,它是所有数组中所有值的总和.假设没有数组将包含相同的值.
这个Java代码有效.
ArrayList<I> list = new ArrayList<I>();
for (Iterator<T[]> iterator = arrays.iterator(); iterator.hasNext();) {
T[] arrayOfA = iterator.next();
//Works like a charm
list.addAll(Arrays.asList(arrayOfA));
}
return list.toArray(new T[list.size()]);
Run Code Online (Sandbox Code Playgroud)
但是这个C#代码没有:
List<I> list = new List<I>();
foreach (T[] arrayOfA in arrays)
{
//Problem with this
list.AddRange(new List<T>(arrayOfA));
//Also doesn't work
list.AddRange(new List<I>(arrayOfA));
}
return list.ToArray();
Run Code Online (Sandbox Code Playgroud)
所以很明显,我需要的阵列以某种方式获得T[]到IEnumerable<I>要添加到列表中,但我不知道这样做的最好方法是什么?有什么建议?
编辑:在VS 2008中开发但需要为.NET 2.0编译.
使用Java,假设v1.6.
我有一个集合,其中唯一索引是一个字符串,非唯一值是一个int.我需要尽快对这个集合执行数千次查找.
我目前正在使用a HashMap<String, Integer>但我担心Integer to int的装箱/拆箱使这个变慢.
我曾想过用一个ArrayList<String>加上一个int[].
即代替:
int value = (int) HashMap<String, Integer>.get("key");
Run Code Online (Sandbox Code Playgroud)
我可以
int value = int[ArrayList<String>.indexOf("key")];
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?有更快的方法吗?
ps我只会构建一次集合并且可能会修改一次,但每次我都知道它的大小,所以我可以使用String[]而不是ArrayList但不确定是否有更快的方法来复制indexOf ...
c# ×3
.net ×2
java ×2
android ×1
ant ×1
arrays ×1
asp.net ×1
caching ×1
collections ×1
compilation ×1
gethashcode ×1
hashcode ×1
ienumerable ×1
ios ×1
list ×1
monocross ×1
soa ×1
tcp ×1
tfs ×1
xamarin.ios ×1