小编Kev*_*ell的帖子

比较对象的不同实现的优点/缺点

这个问题涉及基本相同代码的2种不同实现.

首先,使用委托创建一个比较方法,该方法可以在排序对象集合时用作参数:

class Foo
{
    public static Comparison<Foo> BarComparison = delegate(Foo foo1, Foo foo2)
    {
        return foo1.Bar.CompareTo(foo2.Bar);
    };
}
Run Code Online (Sandbox Code Playgroud)

当我想要一种以与CompareTo函数提供的方式不同的方式对Foo对象的集合进行排序时,我使用上述方法.例如:

List<Foo> fooList = new List<Foo>();
fooList.Sort(BarComparison);
Run Code Online (Sandbox Code Playgroud)

二,使用IComparer:

public class BarComparer : IComparer<Foo>
{
    public int Compare(Foo foo1, Foo foo2)
    {
        return foo1.Bar.CompareTo(foo2.Bar);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我想在Foo对象的集合中对Foo对象进行二进制搜索时,我使用上面的代码.例如:

BarComparer comparer = new BarComparer();
List<Foo> fooList = new List<Foo>();
Foo foo = new Foo();
int index = fooList.BinarySearch(foo, comparer);
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 每种实现的优点和缺点是什么?
  • 有哪些方法可以利用这些实现中的每一种?
  • 有没有办法以这种方式组合这些实现,我不需要复制代码?
  • 我是否可以仅使用其中一个实现来实现二分搜索和替代集合排序?

.net c# comparison icomparer

18
推荐指数
2
解决办法
2316
查看次数

使用hibernate标准,有没有办法逃避特殊字符?

对于这个问题,我们希望避免编写特殊查询,因为查询必须在多个数据库之间不同.仅使用休眠标准,我们希望能够转义特殊字符.

这种情况是需要能够转义特殊字符的原因:

假设我们在数据库中有表'foo'.表'foo'只包含1个字段,称为'name'."名称"字段可以包含在数据库中可能被视为特殊的字符.这种名称的两个例子是'name_1'和'name%1'."_"和"%"都是特殊字符,至少在Oracle中是这样.如果用户想要在数据库中输入这些示例之后搜索其中一个示例,则可能会出现问题.

criterion = Restrictions.ilike("name", searchValue, MatchMode.ANYWHERE);
return findByCriteria(null, criterion);
Run Code Online (Sandbox Code Playgroud)

在此代码中,'searchValue'是用户为应用程序提供的用于搜索的值.如果用户想要搜索'%',则将返回用户数据库中的每个'foo'条目.这是因为'%'字符表示字符串匹配的"任意数量的字符"通配符,而hibernate生成的SQL代码将如下所示:

select * from foo where name like '%' 
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉hibernate逃避某些字符,或创建一个非数据库类型特定的解决方法?

java database hibernate criteria escaping

16
推荐指数
1
解决办法
3万
查看次数

如何在C#中模拟元组和集合?

我想在c#中使用python的一些功能,如Tuples和Sets.我应该实施它们吗?还是已经实施了?任何人都可以知道.net语言的动态数据结构库吗?

c# python tuples set data-structures

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

如何在Java中创建可调整大小的数组?

在Java中使用可调整大小的数组的最佳方法是什么?我尝试使用Vector,但是当你进行插入时,它会移动所有元素,我需要一个可以增长但元素保持不变的数组.我确信这有一个简单的答案,但我仍然不太确定.

java arrays implementation resizable

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

在Hudson或Jenkins中,如何恢复已删除的构建?

我不小心删除了一些我宁愿保留的工作版本.我从备份恢复了磁盘上的构建,但是当我处于该作业的状态页面时,它们仍然不会显示.

我已经尝试过触发另一个构建工作并重新启动Hudson.

如何完全恢复这些构建?是否存在Hudson用于存储此类信息的数据库?

continuous-integration hudson jenkins

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

Parallel For Loop - 添加到List时出现问题

我有一些涉及Parallel for循环和添加到List的问题.问题是,相同的代码可能在不同的时间生成不同的输出.我在下面设置了一些测试代码.在这段代码中,我创建了一个包含10,000个int值的List.1/10的值将为0,1/10的值将为1,一直到值的十分之一为9.

设置此List后,我设置了一个Parallel for循环,遍历列表.如果当前数字为0,我将一个值添加到新列表中.Parallel for循环完成后,我输出列表的大小.大小应始终为1,000.大多数时候,给出了正确的答案.但是,我发现有3种可能的错误结果:

  1. 列表的大小小于1,000
  2. 发生IndexOutOfRangeException @doubleList.Add(0.0);
  3. 发生ArgumentException @doubleList.Add(0.0);

给出ArgumentException的消息是: Destination array was not long enough. Check destIndex and length, and the array's lower bounds.

可能导致错误的原因是什么?这是一个.Net错误吗?有什么我可以做的,以防止这种情况发生?

请亲自试用代码.如果您没有收到错误,请尝试几次.另请注意,使用单核机器时可能不会发现任何错误.

using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace ParallelTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> intList = new List<int>();
            List<double> doubleList = new List<double>();

            for (int i = 0; i < 250; i++)
            {
                intList.Clear();
                doubleList.Clear();

                for (int j = 0; j < 10000; j++) …
Run Code Online (Sandbox Code Playgroud)

parallel-processing list .net-4.0 c#-4.0

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

JSP中的自定义呈现基于没有instanceof的类的类型

你如何在不同类型的jsp中正确呈现对象列表?比如说,我必须以指定的顺序渲染这些不同的对象.

一种方法可能是使用公共类型变量或instanceof,但这意味着有一个大的switch/if语句来管理它们:

<c:forEach var="o" items="${bigListofObjects}"  >
    <c:choose>
        <c:when test='${o.type=="simple"}' >
        <!-- render simple -->
        </c:when>
        <c:when test='${o.type=="complex"}' >
        <!-- render complex -->
        </c:when>
        <!-- etc etc ... -->
    </c:choose>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

我可以为每个类添加一个render()方法,但这意味着将视图与其余代码混合.

如果我想稍后渲染另一种类型会发生什么?我可以用自定义jsp标签做些什么吗?

java jsp jstl jsp-tags

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

使用 Dapper Extensions,插入 IEnumerable&lt;T&gt; 时可以检索 ID

如果一次插入一个对象,则可以从该对象中获取 Id:

foreach (var object in objectList)
{
    conn.Insert(object);
    int id = object.Id; // Returns Id as expected
}
Run Code Online (Sandbox Code Playgroud)

但是,如果插入 IEnumerable 对象,则无法正确获取 Id:

conn.Insert(objectList);
foreach (var object in objectList)
{
    int id = object.Id; // Returning 0
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以插入对象列表并仍然获取 Id,而无需一次插入 1 个?

.net c# dapper dapper-extensions

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

有没有办法搜索和访问当前正在运行的线程?

使用Java 6:

我有一个方法,使用线程在后台运行任务.此任务访问文件,因此该方法不应该有多个线程在运行.

我试图弄清楚是否有一种方法可以在我的方法开头搜索活动的线程.我想知道是否有一个活动的线程已经在运行我的任务,以便我可以正确处理这种情况.

如果没有先前Thread的实际实例,这是否可行?我想避免全局保存线程的实例.

java multithreading

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

在C#应用程序中,将许多记录插入sql server的最佳方法是什么?

我需要从ac#application执行一个非常大的sql server插件.在20,000到50,000记录范围内的某个地方.

通过SQL Server执行插入的最快方法是什么?

我知道有几个选项,但我不知道哪个是最快的.

   insert into MyTable(column1, column2, ..., column*)
   select 'value','value',...,'value'
   union
   select 'value','value',...,'value'
Run Code Online (Sandbox Code Playgroud)

要么

   insert into MyTable(column1, column2, ..., column*)
   exec('select ''value'',''value'',...,''value'''
        'select ''value'',''value'',...,''value''')
Run Code Online (Sandbox Code Playgroud)

要么

   bulk insert from a data file
Run Code Online (Sandbox Code Playgroud)

要么

   Any better way that you know of :)
Run Code Online (Sandbox Code Playgroud)

c# sql

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