小编dav*_*v_i的帖子

按位整数立方根算法

这是计算整数平方根的简单方法:

int isqrt(int num)
{
    int root=0;
    int b = 0x8000;
    int a=0, c=0;

    while (b) {
        c = a|b;

        if (c*c <= num)
            a |= b;   

        b >>= 1;
    }       
}
Run Code Online (Sandbox Code Playgroud)

巧妙地(感谢维基百科),这可以像这样进行优化:

int sqrt(short num)
{
    int op = num;
    int res = 0;
    int one = 1 << 30;

    while (one > op)
        one >>= 2;

    while (one != 0) {
        if (op >= res + one) {
            op -= res + one;
            res = (res …
Run Code Online (Sandbox Code Playgroud)

algorithm math optimization

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

ListViewItem的组未通过其他集合保留

我正在尝试在自定义中实现搜索功能,ListView因此我隐藏Items了一个ObservableCollection允许的自定义AddRange,类似于在damonpayne.com上定义的那个(对于tl; dr-ers在那里基本上它会抑制触发OnCollectionChanged事件,同时添加多个项目随后发射NotifyCollectionChangedAction.Reset):

public new MyCollection<ListViewItem> Items { get; protected set; }
Run Code Online (Sandbox Code Playgroud)

MyCollection_CollectionChanged()填充base.Items:

this.BeginUpdate();
base.Items.Clear();
base.Items.AddRange(this.Items.ToArray());
this.EndUpdate();
Run Code Online (Sandbox Code Playgroud)

这个想法是,当项目不满足搜索条件时,它们将从base.Items(即System.Windows.Forms.ListView)中删除,但保留在this.Items(即My.Name.Space.MyListView)中.取消搜索或更改条款时,base.Items可以重新填充this.Items.

除了一个小但重要的警告之外,这个工作正常并且符合预期:

问题是,ListViewItemS' Group是不是一直被从携带this.Itemsbase.Items,因此所有的项目出现在组'默认’.

关于为什么会发生这种情况以及如何解决问题的任何想法?

更新

我仍然坚持这个.肯定做的.ToArray()只是创建一个浅的副本,Items所以Group应该保留?Maverik已经证实了这一点:

我只是在Linqpad中调用,虽然列表引用不同,但你是对的..对象引用是相同的.

更新2

好的,经过一些调查我发现它发生了什么.

ListViewItems 添加到MyCollection<ListViewItem>: …

c# listview .net-3.5 winforms

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

轻松将整个类实例写入XML文件并重新读入

我有一个名为的主类theGarage,它包含我们的客户,供应商和工作类的实例.

我想将程序数据保存到XML文件,我使用了下面的代码(只是一个片段,我有其他类的匹配代码).我想知道是否有一种更简单的方法来执行此操作,例如将整个theGarage类写入XML文件并将其读入,而不必像下面那样编写所有这些代码.

   public void saveToFile()
    {
        using (XmlWriter writer = XmlWriter.Create("theGarage.xml"))
        {
            writer.WriteStartDocument();

            ///
            writer.WriteStartElement("theGarage");
            writer.WriteStartElement("Customers");

            foreach (Customer Customer in Program.theGarage.Customers)
            {
                writer.WriteStartElement("Customer");
                writer.WriteElementString("FirstName", Customer.FirstName);
                writer.WriteElementString("LastName", Customer.LastName);
                writer.WriteElementString("Address1", Customer.Address1);
                writer.WriteElementString("Address2", Customer.Address2);
                writer.WriteElementString("Town", Customer.Town);
                writer.WriteElementString("County", Customer.County);
                writer.WriteElementString("PostCode", Customer.Postcode);
                writer.WriteElementString("TelephoneHome", Customer.TelephoneHome);
                writer.WriteElementString("TelephoneMob", Customer.TelephoneMob);

                //begin vehicle list
                writer.WriteStartElement("Vehicles");

                foreach (Vehicle Vehicle in Customer.Cars)
                {
                    writer.WriteStartElement("Vehicle");
                    writer.WriteElementString("Make", Vehicle.Make);
                    writer.WriteElementString("Model", Vehicle.Model);
                    writer.WriteElementString("Colour", Vehicle.Colour);
                    writer.WriteElementString("EngineSize", Vehicle.EngineSize);
                    writer.WriteElementString("Registration", Vehicle.Registration);
                    writer.WriteElementString("Year", Vehicle.YearOfFirstReg);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# xml file

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

多列不区分大小写的组

反正有没有做LINQ2SQL查询做类似的事情:

var result = source.GroupBy(a => new { a.Column1, a.Column2 });
Run Code Online (Sandbox Code Playgroud)

要么

var result = from s in source
             group s by new { s.Column1, s.Column2 } into c
             select new { Column1 = c.Key.Column1, Column2 = c.Key.Column2 };
Run Code Online (Sandbox Code Playgroud)

但忽略了分组列内容的情况?

c# linq linq-to-sql

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

如何更改#region后面的"名称"变量的颜色

我四处搜索,但在VS2012中#region之后我找不到改变"name"颜色的选项.

例如,如果我有以下代码:

#region Test some code

CallSomeCode();

#endregion
Run Code Online (Sandbox Code Playgroud)

我该如何改变颜色Test some code

c# visual-studio-2012

11
推荐指数
2
解决办法
4415
查看次数

防止表单通过event.preventDefault()提交; 不工作

我正在使用jQuery提交我的表单变量,我试图阻止表单通过常规方式提交(单击提交按钮或按其中一个字段输入)

我有这个:

$('#form').submit(function(){
    event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

但它似乎没有工作我的表格仍在提交,转到process.php页面..

forms jquery submit

11
推荐指数
4
解决办法
3万
查看次数

将对象数组的对象数组转换为对象的二维数组

我有一个第三方库返回一个对象数组的对象数组,我可以填充到一个对象[]:

object[] arr = myLib.GetData(...);
Run Code Online (Sandbox Code Playgroud)

结果数组由object []条目组成,因此您可以将返回值视为某种记录集,其中外部数组表示行,而内部数组包含可能未填充某些字段的字段值(锯齿状数组) .要访问各个字段,我必须像:

int i = (int) ((object[])arr[row])[col];//access a field containing an int
Run Code Online (Sandbox Code Playgroud)

现在因为我很懒,我想要访问这样的元素:

int i = (int) arr[row][col];
Run Code Online (Sandbox Code Playgroud)

为此,我使用以下Linq查询:

object[] result = myLib.GetData(...);
object[][] arr = result.Select(o => (object[])o ).ToArray();
Run Code Online (Sandbox Code Playgroud)

我尝试使用简单的强制转换,object[][] arr = (object[][])result;但失败并出现运行时错误.

现在,我的问题:

  • 有更简单的方法吗?我觉得有些漂亮的演员应该做的伎俩?
  • 另外我担心性能,因为我必须重塑大量数据只是为了节省一些时间,所以我想知道这是否真的值得呢​​?

编辑: 谢谢大家的快速回答.
@James:我喜欢你在新课程中结束罪魁祸首的答案,但缺点是我在接受源数组时总是要做Linq包装,而索引器需要row和col值int i = (int) arr[row, col]; (我需要得到一个完整的行也很喜欢object[] row = arr[row];,抱歉没有发布在开头).
@Sergiu Mindras:像James一样,我认为扩展方法有点危险,因为它适用于所有object[]变量.
@Nair:我为我的实现选择了你的答案,因为它不需要使用Linq包装器,我可以int i = (int) arr[row][col];使用object[] row = arr[row];
@quetzalcoatl和@Abe Heidebrecht 使用或整行访问两个单独的字段:感谢提示Cast<>(). …

c# linq arrays

11
推荐指数
2
解决办法
3212
查看次数

多维数据集根整数?

这似乎很简单,但我找不到办法.我需要显示整数的立方根是否为整数.我is_integer()在Python 3.4中使用了float方法但是没有成功.如

x = (3**3)**(1/3.0) 
is_integer(x)    
True
Run Code Online (Sandbox Code Playgroud)

x = (4**3)**(1/3.0) 
is_integer(x)    
False
Run Code Online (Sandbox Code Playgroud)

我想x%1 == 0,x == int(x)isinstance(x,int)没有成功.

我很感激任何评论.

python python-3.x

11
推荐指数
2
解决办法
6619
查看次数

在MVC 5中调用操作中的异步方法过滤器

我正在编写一个Action Filter(继承自ActionFilterAttribute),它用于HttpClient将数据POST到方法中的外部服务器OnResultExecuted.HttpClient有一个PostAsync返回等待的方法Task<HttpResponseMessage>.

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
    using (var client = new HttpClient())
    {
        var task = client.PostAsync(GetUri(), GetContent());
        var result = task.Result; // blocking
    }
}
Run Code Online (Sandbox Code Playgroud)

MVC 4中Async动作过滤器的接受答案表明它在MVC 4中是不可能的.

这在MVC 5中是否仍然如此,如果是这样,在不阻塞线程的情况下调用此异步方法的最佳方法是什么?

c# asp.net-mvc async-await asp.net-mvc-5

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

如何在后台创建多个对象?

我正在使用MagicalRecord 2.0.3,我无法弄清楚如何在后台保存数据.

根据文档,这样的东西应该工作:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
    // Do this hundreds of times
    [MyObject createInContext:localContext];
}];
Run Code Online (Sandbox Code Playgroud)

但是,没有任何内容保存到数据库中.我见过多个人发布类似这样的解决方案:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
    // Do this hundreds of times
    [MyObject createInContext:localContext];
} completion:^{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[NSManagedObjectContext defaultContext] saveNestedContexts];
    }];
}];
Run Code Online (Sandbox Code Playgroud)

这确实将我的数据保存在数据库中,但是由于保存发生在主线程上,我的应用程序暂时没有响应(使用我的数据集,大约3秒,这太长了).

我也尝试过这个,但它在保存时也会阻塞:

self.queue = [[NSOperationQueue alloc] init];

[self.queue addOperationWithBlock:^{
    NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];

    // Do this hundreds of times
    [MyObject createInContext:localContext];

    [localContext saveNestedContexts];
}];
Run Code Online (Sandbox Code Playgroud)

最后,与此代码相同的阻止效果:

dispatch_queue_t syncQueue = dispatch_queue_create("Sync queue", NULL);
dispatch_async(syncQueue, ^{
    NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];

    // Do …
Run Code Online (Sandbox Code Playgroud)

multithreading core-data ios magicalrecord

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